对象关系映射技术(ORM)是面向对象编程的一个重大技术进步,在Java领域中已经得到广泛的应用。Hibernate是目前Java领域中最受欢迎的ORM开源框架,使得程序员能将更多的精力应用于业务逻辑的设计。本书内容分为三部分,第一部分介绍ORM的基本理论及Hibernate基础;第二部分讲解Hiberrlate技术的查询、事务、缓存等高级性能;第三部分剖析了大量Hiberrlate业界应用的最佳实践经验,包括使用Spring集成Hibernate,使用DAO模式透明化持久层设计,Hibernate在Web应用中的最佳实践和Hibernate性能优化等。
本书光盘包括书中所有已经调试通过的范例源代码程序,以及所需要的、Java包和类文件。作者还提供博客支持和电子邮件答复。
本书站在客观评价Hibernate这门持久化技术的角度,来分析Hibernate的基本构成、知识点及实现原理,汇总业界及作者在Hibernate应用方面的实践经验,分清Hibernate的优势和劣势,及可代替的解决方案,展示Hibernate对象关系映射技术的真谛,总结Hibernate在项目开发中的最佳实践经验,使得读者在入门领悟Hibernate理论知识的同时,能了解Hiberhate的优势和劣势,做到扬长避短,而不是盲目膜拜。
本书以Hibernate 3为基础,由浅入深介绍Hibernate OR映射的基本理论知识及最佳实践经验。内容主要分三部分,第一部分是对象关系映射技术的基本理论及Hibernate对象映射技术的基本知识点,第二部分讲解Hibernate技术的查询和事务、缓存等高级性能,第三部分是Hibernate业界应用的最佳实践经验,包括如何使用Spring集成Hibernate,使用DAO模式透明化持久层设计,Hibernate在Web应用中的最佳实践和Hibernate性能优化和如何使用iBATIS、JdbcTemplate来替代Hibernate。
本书特别适合使用Hibernate进行企业开发的开发人员作为参考书籍,可以将书中的Hibernate最佳实践经验应用于项目中,也适合Hibernate的入门读者作为入门书籍。
第1章 对象.关系映射概述
1.1 分层体系结构
1.1.1 层次结构
1.1.2 分层架构特点
1.1.3 Java数据持久层设计
1.2 软件设计模型
1.2.1 概念模型
1.2.2 数据模型
1.2.3 域模型
1.3 对象-关系映射技术背景
1.3.1 关系数据库操作
1.3.2 数据持久化
1.3.3 直接使用JDBC的弊端
1.3.4 对象-关系映射基本概念
1.4 对象-关系映射工具
1.4.1 Hibernate
1.4.2 JDO
1.4.3 iBATIS
1.5 小结
第2章 快速上手
2.1 准备工作
2.2 Hibernate起步
2.2.1 开发环境准备
2.2.2 创建持久化类
2.2.3 创建对象一关系映射文件
2.2.4 创建Hibernate配置文件
2.2.5 用Hibernate持久化数据
2.2.6 加载并存储对象
2.3 Hibernate体系结构
2.3.1 结构及构成
2.3.2 Hibemate基本API
2.3.3 Configuration
2.3.4 SessionFactory
2.3.5 Session
2.3.6 SessionFactory的配置
2.4 Hibernate Tools
2.4.1 Hibernate基本开发环境
2.4.2 在Ant环境中使用Hibernate Tools
2.4.3 在Eclipse中使Hibernate Tools
2.5 小结
第3章 对象/关系数据库映射
3.1 映射定义
3.1.1 映射文件概要
3.1.2 映射文件结构
3.2 映射文件生成
3.2.1 使用XDoclet生成映射文件
3.2.2 安装Doclipse插件
3.2.3 编写Java类对象
3.2.4 编写类对象的XDoclet Hibernate标签
3.2.5 执行Ant Task生成配置文件
3.3 对象标识符
3.3.1 内置对象标识符
3.3.2 increment策略
3.3.3 高/低位算法生成策略
3.3.4 标识字段和序列
3.3.5 自定义对象标识符
3.4 映射类型
3.4.1 基本映射类型
3.4.2 自定义映射类型
3.5 小结
第4章 关联关系与组件
4.1 关联关系
4.2 一对一关联
4.2.1 使用主键关联
4.2.2 使用外键关联
4.3 一对多关联
4.3.1 单向关联
4.3.2 最佳实践——提高删除性能
4.3.3 双向关联
4.4 多对多关联
4.5 检索策略
4.5.1 检索策略
4.5.2 多对一
4.5.3 一对一
4.5.4 一对多/多对多
4.6 组件映射
4.7 传播性持久化
4.8 小结
第5章 集合类映射
5.1 集合
5.1.1 Java中的集合
5.1.2 Hibernate中的集合
5.2 映射Map
5.2.1 Java中的Map
5.2.2 映射Map
5.3 映射Set
5.3.1 Java中的Set
5.3.2 映射Set
5.4 映射List
5.4.1 Java中的List
5.4.2 映射List
5.5 映射Bag
5.5.1 映射Bag
5.5.2 映射idbag
5.6 集合排序
5.6.1 数据库排序
5.6.2 内存排序
5.7 小结
第6章 继承映射
6.1 继承映射
6.2 继承映射的几种策略
6.2.1 每个类继承结构一张表
6.2.2 每个子类一张表
6.2.3 每个子类一张表,使用辨别标志
6.2.4 混合使用“每个类继承结构一张表”和“每个子类一张表”
6.2.5 每个具体类一张表
6.2.6 每个具体类一张表,使用隐式多态
6.3 小结
第7章 操作持久化对象
7.1 持久对象的生命周期
7.1.1 瞬时对象
7.1.2 持久对象
7.1.3 脱管对象
7.1.4 区分持久对象
7.1.5 equals()和hashCode()
7.2 理解Session清理
7.2.1 Session缓存
7.2.2 Session清理
7.2.3 深入Session清理机制
7.3 Session操作对象的方法
7.3.1 save()
7.3.2 get()
7.3.3 update()
7.3.4 delete()
7.3.5 saveOrUpdate()
7.4 传播性持久化
7.5 小结
第8章 Hibernate查询
8.1 Hibernate的查询方式
8.1.1 通过对象标识符查询
8.1.2 面向对象查询——HQL
8.1.3 按条件查询方式——QBC
8.1.4 按样例查询方式——QBE
8.1.5 传统的查询方式——Native SQL
8.1.6 选择合适的抓取策略
8.2 查询实现
8.2.1 Session的createQuery()方法
8.2.2 迭代获取结果
8.2.3 多对象查询
8.2.4 统计查询
8.2.5 绑定参数式查询
8.3 过滤器
8.3.1 Hibernate过滤器
8.3.2 集合过滤器
8.4 Hibernate分页支持
8.4.1 Hibernate分页实现
8.4.2 Hibernate分页原理
8.5 使用条件查询
8.5.1 创建Criteria实例
8.5.2 Criteria结构
8.5.3 Criterion
8.5.4 Projection
8.6 使用Native SQL查询
8.6.1 创建一个基于SQL的Query
8.6.2 命名SQL查询
8.6.3 指定字段/别名
8.6.4 使用存储过程来查询
8.6.5 Native SQL查询常用方法
8.7 查询优化
8.7.1 开启Hibernate SQL日志功能
8.7.2 单步跟踪应用执行情况
8.8 小结
第9章 HQL查询语言
9.1 HQL语言特点
9.1.1 HQL概要
9.1.2 面向对象
9.1.3 大小写敏感性
9.1.4 跨数据库性
9.1.5 相关Hibernate设置
9.1.6 关于本章例程
9.2 HQL查询构成
9.2.1 FROM——指定查询对象
9.2.2 理解多态查询
9.2.3 SELECT——指定查询结果
9.2.4 JOIN——使用连接
9.2.5 WHERE——指定查询条件
9.2.6 表达式
9.2.7 查询分组与查询排序
9.2.8 子查询
9.2.9 批量更新与删除
9.3 小结
第10章 事务与并发
10.1 事务概念
10.2 声明事务边界
10.2.1 在数据库中声明事务边界
10.2.2 在JDBC中声明事务边界
10.2.3 在JTA中声明事务边界
10.2.4 在Hibernate中声明事务边界
10.3 事务与Session的关系
10.4 事务隔离级别
10.5 Hibernate并发控制
10.5.1 悲观锁定
lO.5.2 乐观锁定
lo.5.3 session的lock方法与update方法的区别
10.6 最佳实践——怎样划分事务
10.7 小结
第11章 理解Hibernate缓存
11.1 缓存原理
11.2 Hibernate缓存
11.2.1 Hibernate一级缓存
11.2.2 Hibernate二级缓存
11.2.3 第三方缓存实现
11.2.4 缓存并发策略
11.2.5 最佳实践——二级缓存的应用
11.2.6 Hibernate查询缓存
11.2.7 最佳实践——查询缓存的应用
11.3 不要放任缓存增长
11.3.1 精确控制缓存失效策略
11.3.2 大数据量处理及时清除缓存
11.4 使用OSCache进行缓存
11.4.1 OSCache介绍
11.4.2 使用OSCache
11.4.3 OSCache集群缓存支持
11.5 小结
第12章 通过Spring访问Hibernate
12.1 简化Hibernate使用难度
12.1.1 会话管理的困难
12.1.2 业界流行做法
12.1.3 集中管理Session
12.1.4 最佳实践
12.2 Spring的Hibernate支持
12.2.1 Hibernate SessionFactory注入
12.2.2 借助模板访问Hibernate
12.2.3 回调Callback机制
12.2.4 HibernateDaoSupport支持
12.2.5 异常处理
12.3 Spring事务支持
12.3.1 事务声明
12.3.2 编程式事务管理
12.3.3 声明式事务管理
12.3.4 事务管理策略
12.3.5 最佳实践
12.4 小结
第13章 DAO透明持久化
13.1 DAO模式核心思想
13.1.1 DAO模式中的对象
13.1.2 数据访问对象
13.1.3 业务对象
13.1.4 传输对象
13.2 基于DAO模式的Hibernate设计
13.2.1 DAO模式设计
13.2.2 DAO接口设计
13.2.3 采用范型的DAO接口设计
13.3 DAO设计策略
13.3.1 事务的界定
13.3.2 DAO和透明持久化
13.3.3 数据访问操作的粒度
13.3.4 透明持久化和对象状态
13.3.5 DAO中域对象状态维护
13.4 DAO模式注意事项
13.5 不要让应用局限于Hibernate
13.5.1 使用Hibemate的局限性
13.6 小结
第14章 Web应用中的Hibemate
14.1 Web应用分层中的Hibernate
14.1.1 MVC模式
14.1.2 Web应用分层
14.2 Struts与Hibernate的最佳结合
14.2.1 Struts中的ActionForm
14.2.2 集成ActionForm与POJO
14.2.3 使用Spring建立桥梁
14.3 让分页不再是烦恼
14.3.1 页面分页几种方案
14.3.2 使用Hibernate的分页实现
14.3.3 适配不同持久方法的分页封装
14.4 异常处理
14.4.1 异常捕捉机制
14.4.2 在何处处理异常
14.5 使用拦截器与事件
14.5.1 Hibernate中的拦截器
14.5.2 Hibernate中的事件
14.6 Struts与Spring、Hibernate结合应用示例
14.7 小结
第15章 Hibernate性能
15.1 不要使Hibernate性能变成瓶颈
15.1.1 Hibernate的性能担忧
15.1.2 Hibernate的性能优化机制
15.1.3 提高Hibernate启动速度
15.2 不要掉入批量处理陷阱
15.2.1 Hibernate批量操作实现
15.2.2 批量插入改进方案
15.2.3 批量更新改进方案
15.2.4 考虑使用无状态Session批量操作
15.2.5 尽可能使用DML风格的批量操作
15.3 Web应用中的Hibernate优化
15.4 考虑替代方案
15.4.1 使用iBATIS实现
15.4.2 iBATIS持久策略
15.4.3 Spring中集成iBATIS
15.4.4 使用Spring中的JdbcTemplate替代
15.5 小结