这篇博文主要对hibernate框架概念进行总结。后面会从原理和源码方面对hibernate进一步总结和分析
但是对hibernate框架没有太明确的认识,所以对hibernate框架的难点和大概的雏形没有很好的把握,希望能够在完成这篇博文后通过阅读书籍以及对源码的
阅读能够提高对hibernate的理解;同时在数据库方面没有很好的认知;希望有大神能够给予指教,特别是框架学习方面
持久化--将程序数据在持久状态和瞬时状态转换的机制
对象关系映射--用于解决面向对象与关系数据库互不匹配现象的技术;通过描述对象和数据库之间映射的元数据进行持久化操作
hibernate目录结构
doc--API文档
eg---映射文件实例
etc--配置文件实例
grammar-hql语法规定
lib--第三方类库
src--核心类库源码
test-测试程序
元素
Configuration--配置hibernate,通过读取配置创建SessionFactory对象,是启动期间对象
SessionFactory--针对单个数据库映射关系经过编译后的内存镜像,是线程安全的
Session--应用程序与持久化存储层交互操作的单线程对象,持有一级缓存
Transaction--用于指定原子操作单元范围的单线程对象
ConnectionProvider--数据库连接,用于创建连接池,在创建SesionFactory时实现
映射对象
状态
瞬态--未与持久化上下文关联过,没有持久化标识
持久化--实例正与持久化上下文关联,拥有持久化标识
脱管--曾经与持久化上下文关联且拥有持久化标识
hibernate对象关系映射
序列生成器(generator)
increment; identity; sequence; hilo ;
seqhilo ; uuid ; guid ; native;
assigned ; select ; foreign ;
加载方式(抓取策略)
立即加载--指在实体数据加载完成立即加载相关的数据
延迟加载--在真正需要数据时才执行数据加载操作,包括实体延迟加载
集合延迟加载,属性延迟加载;使用了代理模式;可以通过配置
OpenSessionInViewFilter实现延迟加载
预先加载--将实体数据和相关数据同时进行加载,使用连接查询的方式
批量加载--一次对多条数据进行加载
关联关系映射
<1>从关联的角度看包括单向关系和双向关系,其中双向关系中可通过inverse设置方向一端
<2>从关系的角度看包括一对多关系,一对一关系,多对多关系
hibernate查询语句
<1>HQL
<2>Native SQL
<3>Criteria--包括关联查询;投影查询;离线查询
缓存
<1>一级缓存--session级别缓存
注意:一级缓存内数据没有过期策略,即在session关闭之前不会清空
<2>二级缓存--sessionFactory级别缓存
事务管理
事务--指单个逻辑工作单元执行的一系列操作 ,特性包括原子性,一致性,隔离性,持久性
<1>事务并发
事务并发问题
(1)第一类丢失更新:在完全未隔离事务的情况下,两个事务更新同一条数据资源,某一事务异常终止回滚造成更新丢失
(2)脏读:第二个事务查询到第一个事务未提交更新的数据
(3)虚读:一个事务执行两次查询,第二次结果集包含第一次中没有或某些行被删除,造成两次结果不一致
(4)不可重复读:一次事务两次读取同一行得到不同结果,两次结果不同造成不可信任
(5)第二类丢失更新:两个事务同时提交同一行数据造成第一个事务改变丢失
<2>事务隔离机制
数据库事务隔离级别
(1)Serializable(串行化)
(2)Repeatable Read(可重复读)
(3)Read Commited(可读已提交)
(4)Read Uncommited(可读未提交)
<3>锁机制
悲观锁--在整个数据处理过程中将数据锁定,通过数据库锁机制实现排他性
乐观锁--通过数据版本记录机制实现对数据版本检查解决事务并发问题
可通过增加optimistic-lock属性实现