Hibernate (开放源代码的对象关系映射框架)


每个6大接口进行一句话总结。

1、Configuration接口:负责配置并启动Hibernate

2、SessionFactory接口:负责初始化Hibernate

3、Session接口:负责持久化对象的CRUD操作

4、Transaction接口:负责事务

5、Query接口和Criteria接口:负责执行各种数据库查询

 


核心接口和类:

Session:


Session接口负责执行被持久化对象的CRUD操作

SessionFactory:

SessionFactory接口负责初始化Hibernate   ,并负责创建Session对象

Configuration:


Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。然后创建一个SessionFactory对象

Transaction


Transaction 接口是一个可选的API,取而代之的是Hibernate 的设计者自己写的底层事务处理代码

Query

Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

Criteria条件是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设置查询条件
用法:http://baike.so.com/doc/6841246-7058527.html

缓存管理

Hibernate 中提供了两级Cache(高速缓冲存储器)一级别的缓存由hibernate管理的,一般情况下无需进行干预,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。

第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
Hibernate的二级缓存策略的一般过程如下:
1) 条件查询的时候,一次获得所有的数据对象
2) 把获得的所有数据对象根据ID放入到第二级缓存中
 3)当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4) 删除、更新、增加数据的时候,同时更新缓存

延迟加载机制


只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来

代码:
(1)建立实体类User.java
(2)提供User.hbm.xml文件,完成实体类映射
(3)将User.hbm.xml文件加入到hibernate.cfg.xml文件中
(4)编写工具类ExportDB.java,将hbm生成ddl,也就是hbm2ddl
 5)客户端代码:添加用户数据到mySQL
  1. package com.liang.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.SessionFactory;  
  7. import org.hibernate.cfg.Configuration;  
  8.   
  9. public class Client {  
  10.     public static void main(String[]args){  
  11.         //读取hibernate.cfg.xml文件  
  12.         Configuration cfg = new Configuration().configure();  
  13.         //建立SessionFactory  
  14.         SessionFactory factory =cfg.buildSessionFactory();  
  15.           
  16.         //取得session  
  17.         Session session = null;  
  18.           
  19.         try{  
  20.             //开启session  
  21.             session = factory.openSession();  
  22.             //开启事务  
  23.             session.beginTransaction();  
  24.               
  25.             User user = new User();  
  26.             user.setName("jiuqiyuliang");  
  27.             user.setPassword("123456");  
  28.             user.setCreateTime(new Date());  
  29.             user.setExpireTime(new Date());  
  30.             //保存User对象  
  31.             session.save(user);  
  32.               
  33.             //提交事务  
  34.             session.getTransaction().commit();  
  35.               
  36.         }catch(Exception e){  
  37.             e.printStackTrace();  
  38.             //回滚事务  
  39.             session.getTransaction().rollback();  
  40.         }finally{  
  41.             if(session != null){  
  42.                 if(session.isOpen()){  
  43.                     //关闭session  
  44.                     session.close();  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49. }  


转载于http://blog.csdn.net/jiuqiyuliang/article/details/41318751

主要是关系映射

除了XML方式配置映射外,还可以通过给类文件添加注解的方式配置映射





写映射的框架(拷模版)

多对一

<many-to-one name=“” class=“” column=“”/>

一对多

Set

<set name="">

        <key column=""></key>

        <one-to-many class=""/>

</set>

多对多

Set

<set name="" table="">

        <key column=""></key>

        <many-to-many class="" column=""/>

</set>

关系映射的解释:

 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。
主键关联映射解释:两个实体对象的主键一样,以表明它们之间的一一对应关系;不需要多余的外键字段来维护关系,仅通过主键来关联
唯一外键关联解释:两个实体对象用一个外键来关联,以表表明对象之间的关系。其实它是多对一关联映射的特例,多的一端加上唯一的限制之后,用来表示一对一的关联关系
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章