1.Configuration类
是Hibernate的入口,它负责配置并启动Hibernate。Hibernate通过Configuration的实例加载配置文件信息,然后读取指定对象关系映射文件的内容并创建SessionFactory实例。
2.SessionFactory接口
负责初始化Hibernate。一个SessionFactory实例对应一个数据库。应用程序从SessionFactory中获得Session实例。
3.Session接口
Session被称为持久化管理器,负责管理与持久化相关的操作:存储、更新、删除和加载对象。
4.Transaction接口
是Hibernate框架的事务接口。它对底层的事务接口做了封装。包括:JDBC API和JTA。
Session的缓存 (一级缓存)
Session的CRUD方法以及调用查询接口的list(),iterate()方法时,如果session缓存中不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中,如果session缓存中已经存在这个对象,就不需在去数据库加载,而直接使用缓存中的对象。
flush: 进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步 执行一些列sql语句,但不提交事务,;
commit:先调用flush() 方法,然后提交事务. 则意味着提交事务意味着对数据库操作永久保存下来。
session的缓存一般交由hibernate框架自动管理。
基本概念和CURD
1、初始化代码(只做一次)
Configuration cfg = new Configuration();
cfg.configure(“config.cfg.xml”);
也可以通过cfg.setProperty设置属性。
SessionFactory sessionFactory = cfg.buildSessionFactory()
2、模板代码
Session session = null;Transaction tx = null;
try{
session = sessionFactory.openSession();
tx = session.beginTransaction();
//…你的代码save,delete,update,get…
tx.commit();
}catch(Exception e){
if(tx !=null)tx.rollback();throw e;
}finally{
if(session != null)session.close();
}
Session的几个主要方法
1、save保存数据
2、delete,删除对象
3、update,更新对象,如果数据库中没有记录,会出现异常。
4、get,根据ID查,会立刻访问数据库。
5、Load,根据ID查,(返回的是代理,不会立即访问数据库)。
6、saveOrUpdate (根据ID和version的值来确定是save或update
主键生成机制
increment 标识符生成器
l increment 标识符生成器由 Hibernate以递增的方式为代理主键赋值
l Hibernate 会先读取 NEWS 表中的主键的最大值,而接下来向 NEWS 表中插入记录时,就在 max(id) 的基础上递增,增量为 1.(带走+1)
l 适用范围:
• 由于 increment生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统
• 适用于只有单个 Hibernate应用进程访问同一个数据库的场合
• OID 必须为 long, int 或 short类型, 如果把 OID定义为 byte 类型,在运行时会抛出异常
identity 标识符生成器
l identity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型(加1带走)
l 适用范围:
• 由于 identity生成标识符的机制依赖于底层数据库系统, 因此,要求底层数据库系统必须支持自动增长字段类型. 支持自动增长字段类型的数据库包括: DB2, Mysql, MSSQLServer, Sybase等
• OID 必须为 long, int 或 short类型, 如果把 OID定义为 byte 类型,在运行时会抛出异常
sequence 标识符生成器
l sequence 标识符生成器利用底层数据库提供的序列来生成标识符.
l Hibernate 在持久化一个 News 对象时,先从底层数据库的 news_seq 序列中获得一个唯一的标识号,再把它作为主键值
l 适用范围:
• 由于 sequence生成标识符的机制依赖于底层数据库系统的序列, 因此,要求底层数据库系统必须支持序列. 支持序列的数据库包括: DB2 Oracle等
• OID 必须为 long, int 或 short类型, 如果把 OID定义为 byte 类型,在运行时会抛出异常
native 标识符生成器
l native 标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo标识符生成器.
l 适用范围:
• 由于 native能根据底层数据库系统的类型, 自动选择合适的标识符生成器,因此很适合于跨数据库平台开发
• OID 必须为 long, int 或 short类型, 如果把 OID定义为 byte 类型,在运行时会抛出异常
assigned 标识符生成器
l hibernate和底层数据库都不帮助你生成主键,也就是说得自己在程序中手动的设置主键的值。
l 适用范围:
主键有一定的含义,需要根据业务产生的情况。
Uuid标识符生成器
l Hibernate采用128位的UUID算法来生成标识符。该算法能够在网络环境中生成唯一的字符串标识符,这种策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间
l 使用范围:
主键是字符串,而且必须是唯一