zoukankan      html  css  js  c++  java
  • Hibernate随笔

    一、Hibernate

    1.一个持久化框架(它在底层对jdbc进行了封装)
        对象的持久化、两个角度理解:
        1).狭义:把对象保存进数据库中
        2).广义:包括数据库相关的各种操作
         比如:保存,更新,删除,查找,加载  
          ☆加载:根据特定的OID,把一个对象从数据库中加载到内存中
       #OID表示对象术语中的对象标识(Object identifier)
      
    2.轻量级的ORM框架
      ORM(Object/Relation Mapping)对象关系映射
      -ORM主要解决对象-关系的映射
      -ORM思想:将对数据库的操作转换为对对象的操作
      -ORM采用元数据描述对象-关系映射的细节,元数据通常采用xml格式
      
      

    二、第一个Hibernate应用HelloWorld

    ①导入Hibernate的jar包(版本是4.x)
    找到lib文件夹下的required文件夹,导入里面所有的jar包
      antlr-2.7.7.jar
      dom4j-1.6.1.jar
      hibernate-commons-annotations-4.0.5.Final.jar
      hibernate-core-4.3.10.Final.jar
      hibernate-jpa-2.1-api-1.0.0.Final.jar
      jandex-1.1.0.Final.jar
      javassist-3.18.1-GA.jar
      jboss-logging-3.1.3.GA.jar
      jboss-logging-annotations-1.2.0.Beta1.jar
      jboss-transaction-api_1.2_spec-1.0.0.Final.jar
    并且要加入数据库的jar包
      mysql-connector-java-5.1.7-bin.jar
     
    ②Hibernate的开发步骤
    1.创建Hibernate的配置文件hibernate.cfg.xml
    2.创建持久化类
    3.创建对象-关系映射文件,之后再hibernate.cfg.xml中关联映射文件
    4.编写数据库访问代码
     
    报错提示:
    org.hibernate.MappingException: Unknown entity: com.qb.entity.User
    代表没有关联映射文件
     

    三、Hibernate进行CRUD的操作:

    1.根据主键进行查询---加载
    User user = (User)session.get(User.class, 1);
    User user = (User)session.load(User.class, 1);
    2.增加、修改记录
    增加两种格式:
      session.save(user);
       session.persist(user);
    修改:session.update(user);
        两种方式
        1).去手动new对象
     User user = new User();
        user.setId(2);
        user.setName("bbMK2");
        user.setPassword("bbMK2");
        session.update(user); 
        2).先查询在修改(推荐方式)
    User user = (User) session.get(User.class, 1);
        user.setName("bb");
        user.setPassword("bb");
        session.update(user);
    3.删除记录:session.delete(user);
        两种方式:
        1).手动new对象的方式
        
    User u = new User();
        u.setId(4);
        session.delete(u);     
        2).先查询再删除
       
     User user = (User) session.get(User.class, 3);
        session.delete(user);

    4.查询记录:HQL、QBC、SQL查询

    HQL(Hibernate Query Language)
    面向对象查询:
       
     String hql = "FROM User";←这里的User是实体类,不是数据库表名!!
        Query query = session.createQuery(hql);
        List list = query.list();

    四、Hibernate的核心API、以及常用配置

     
    hibernate.cfg.xml核心配置文件:
    1.必须要有的:
           
     <!-- 数据库的基本配置 -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql:///test0221</property>
            <property name="connection.username">root</property>
            <property name="connection.password">123456</property>
            
            <!-- Hibernate的基本配置 -->
            <!-- 数据库的方言 -->
            <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    2.可选的:
            
    <!-- 数据库的策略 -->
            <property name="hbm2ddl.auto">update</property>
            <!-- 显示SQL语句 -->
            <property name="show_sql">true</property>
            <!-- 格式化SQL语句 -->
            <property name="format_sql">true</property>
    hbm2ddl.auto:可取值create|update|create-drop|validate
      -create:会根据你的映射文件*.hbm.xml来自动生成数据库表,但是每一次都会删除上一次的表,然后再重新生成一张新的表,无论你表数据结构有没有更改。
      -create-drop:会根据你的映射文件*.hbm.xml来自动生成数据库表,只要SessionFactory已关闭,表自动删除
      -validate:会和你数据库中的表进行比较,如果映射文件*.hbm.xml的列在数据库中不存在,则抛出异常
      -update:会根据你的映射文件*.hbm.xml来自动生成数据库表,但是当映射文件的列和数据库表对应的结构不一样的时候,会自动更新数据库结构,而不会删除已有的列和行,是我们最常用的。
     
     
    3.映射的配置:
        
    <mapping resource="com/qb/entity/User.hbm.xml"/>
        <mapping resource="com/qb/entity/Admin.hbm.xml"/>
    *.hbm.xml映射文件的配置:  
     <class name="com.qb.entity.User" table="USERS">
            <id name="id" type="java.lang.Integer">
                <column name="ID"/>
                <!-- 指定数据库依靠底层方式 -->
                <generator class="native"></generator>
            </id>
            
            <property name="name" type="java.lang.String">
                <column name="NAME"/>
            </property>
            
            <property name="password" type="java.lang.String">
                <column name="PASSWORD"></column>
            </property>
            
            <property name="date" type="java.util.Date">
                <column name="DATE"></column>
            </property>
        </class>

    核心API:

    1.Configuration
    是专门用于负责管理hibernate配置信息的
    -Hibernate运行的底层信息:配置数据库基本信息、数据库方言、数据库生成策略、c3p0数据库连接池等等
    -持久化类与数据库表的映射关系文件(*.hbm.xml)
     
    2.SessionFactory
    -SessionFactory(理解为数据库连接池)是生产session(可以理解为Connection的地位)的工厂
    -一个应用一般性只初始化一个SessionFactory对象。SessionFactory时候很消耗资源。
    -SessionFactory他的线程是安全的。
    -SessionFactory一旦被创建、则赋予特定的配置信息。
     
    3.Session接口
    里面常用的方法:
    -加载:get()/load()
    -持久化对象的增:save()、persist()、saveOrUpdate()
    -持久化对象的删:delete()
    -持久化对象的改:update(),saveOrUpdate()
    -开启事务:beginTransaction()
    -创建Query:createQuery()
    -管理Session的方法:flush(),clear()..等等
     
    4.持久化对象:
    -必须要有一个无参的构造方法:因为hibernate要使用反射去实例化持久化类
    -必须提供一个标识属性:没有该属性,一些功能不起作用
    -必须是非final类:如果是final类,则无法使用CGLIB代理
    -必须要提供set和get方法:JavaBean风格的属性实行持久化
    -当把持久化类的实例放入到Set集合(进行关联映射),必须要重写equals和hashCode方法
     
    ##尽量让hibernate去维护主键,主键的生成策略改成native就可以了
     
  • 相关阅读:
    java 读取ini文件
    JPA简单的分页条件查询
    工厂模式之简单工厂模式,head first设计模式
    mvnw 找不到或无法加载主类,找不到符号,类
    spring boot 通过feign调用api接口
    Ubuntu18.04 samba配置
    log4cplus例子
    ES->PES->PS打包程序
    RED5安装与配置
    Java 常用的日志工具——JDK自带的java.util.logging包、APACHE 的log4j 与 slf4j日志处理接口
  • 原文地址:https://www.cnblogs.com/qiubin/p/7513557.html
Copyright © 2011-2022 走看看