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就可以了
 
posted @ 2017-09-13 10:03  爱妃接旨  阅读(150)  评论(2编辑  收藏  举报