一、HIBERNATE
ORM中间件,进行对象的持久化。
二、HIBERNATE入门
1、Object/Relation Mapping,简称ORM,解决对象-关系映射。
域模型(对象、属性、关联、继承、多态) |
对象-关系映射文件(XML) |
关系数据模型(表、字段、索引、主键、外键) |
ORM API |
ORM 实现 |
ORM充当业务逻辑层和数据库层之间的桥梁
2、选用ORM时,应用的上层组件应该和ORM中间件保持独立。
3、HIBERNATE 的核心接口
1.)Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。
2.)SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。
3.)Session接口:负责保存、更新、删除、加载和查询对象。
4.)Transaction接口:管理事务。
5.)Query和Criteria接口:执行数据库查询。
Query |
Criteria |
Transation |
SessionFactory |
Configuration |
Session |
Query |
Criteria |
Transation |
SessionFactory |
Configuration |
Session |
Query |
Criteria |
Transation |
SessionFactory |
Configuration |
Session |
三、HIBERNATE对象-关系映射技术
四、HIBERNATE API操纵数据库
1、Session接口:操纵数据库的最主要接口,称为持久化管理器,提供了基本的保存、更新、删除、和查询的方法。
2、Session的缓存:被称为Hibernate的第一级缓存,在Session的实现类SessionImpl中定义了一系列的Java集合,这些Java集合构成了Session的缓存。它存放被当前工作单元加载的对象,称为持久化对象,它和数据库中的相关记录保持同步。当Session的load()方法试图从数据库中加载一个对象是,Session先判断缓存中是否存在这个对象,如果存在,就不需要再到数据库中检索,减少访问数据库频率。
3、Session实例:是轻量级的,它的创建和销毁不需要消耗太多的资源。通常将每一个Session实例和一个数据库事务绑定,也就是说,每执行一个数据库事务,都应该先创建一个新的Session实例,如果事务执行中出现异常,应该撤销事务,不论事务执行成功与否,最后都应该调用Session的close()方法。从而释放Session实例占用的资源。
4、Hibernate应用中Java对象的状态:
1.)临时状态:刚刚用new语句创建。
2.)持久化状态:加入到Session的缓存中。
3.)游离状态:已经被持久化,但不再处于Session的缓存中。
5、Session的保存、更新、删除和查询方法
1.)Session的save()方法。
2.)Session的update()方法。
3.)Session的saveOrUpdate()方法:如果传入的参数是临时对象,就调用save()方法,如果传入的是游离的对象,就调用update()方法(如何判断对象是临时对象还是游离对象?)。
4.)Session的load()和get()方法:对象不存再,load()抛出异常,而get()返回null。
5.)Session的delete()方法。
五、HIBERNATE的检索策略和检索方式
1、检索策略:
1.)立即检索。
2.)延迟检索:lazy。
3.)迫切左外连接检索:outer-jion。
2、检索方式:
1.)导航对象图检索方式:getOrders().iterator()。
2.)OID检索方式:Session的get()和load()方法。
3.)HQL检索方式:Session的find()方法(不具动态参数绑定功能)、Hibernate的Query接口。
4.)QBC检索方式:Query By Criteria,Criteria接口。
5.)本地的SQL检索方式:
六、数据库事务、并发、缓存与性能优化
1、数据库事务由一组业务逻辑上相互依赖的SQL语句组成,它必须具备ACID特征。数据库管理系统采用日志来保证事务的原子性、一致性和持久化型,采用锁机制来实现事务的隔离性。
2、数据库事务必须具备特征:原子性、一致性、隔离性、持久性。
3、缓存:
1.)第一级缓存:Session的缓存。
2.)第二级缓存:SessionFactory的外置缓存。
七、HIBERNATE高级配置