书籍详情
精通JPA与Hibernate:Java对象持久化技术详解(微课视频版)
作者:孙卫琴 著
出版社:清华大学出版社
出版时间:2021-04-01
ISBN:9787302576273
定价:¥168.00
购买这本书可以去
内容简介
本书详细介绍了运用JPA以及目前很成熟的Hibernate 5版本进行Java对象持久化的技术。通过本书,读者不仅能掌握用JPA和Hibernate工具对这两种模型进行映射的技术,还能获得设计与开发Java对象模型和关系数据模型的优选经验。本书将帮助读者编写出具有合理的软件架构以及好的运行性能和并发性能的实用应用程序。书中内容注重理论与实践相结合,列举了大量具有典型性和实用价值的应用实例,并提供了详细的开发和部署步骤。无论对于Java开发的新手还是行家来说,本书都是精通Java对象持久化技术的推荐实用手册。
作者简介
孙卫琴,知名IT作家和Java专家,毕业于上海交通大学,随后主要从事基于Java的软件开发工作,在此其间还从事Java方面的培训和咨询工作。2002年开始Java技术领域的创作,文风清晰严谨、深入浅出,深受读者欢迎,其多部作品的销量在同类书籍中经常位居全国榜首。
目录
源代码
第1章Java应用分层架构及软件模型
1.1应用程序的分层体系结构
1.1.1区分物理分层和逻辑分层
1.1.2软件层的特征
1.1.3软件分层的优点
1.1.4软件分层的缺点
1.1.5Java应用的持久化层
1.2软件的模型
1.2.1概念模型
1.2.2关系数据模型
1.2.3域模型
1.3小结
1.4思考题
第2章Java对象持久化技术概述
2.1直接通过JDBC API来持久化实体域对象
2.2ORM简介
2.2.1对象关系映射的概念
2.2.2描述对象关系映射信息的元数据
2.2.3访问ORM中间件的API
2.2.4常用的ORM中间件
2.3实体域对象的其他持久化模式
2.3.1主动域对象模式
2.3.2CMP模式
2.3.3运用ORM的JPA模式
2.4小结
2.5思考题
第3章个helloapp应用
3.1创建Hibernate的配置文件
3.1.1用Java属性文件作为Hibernate配置文件
3.1.2XML格式的Hibernate配置文件
3.2创建持久化类
3.3创建数据库Schema
3.4创建对象关系映射文件
X
XI
3.4.1映射文件的文档类型定义(DTD)
3.4.2把Customer持久化类映射到CUSTOMERS表
3.5通过Hibernate API操纵数据库
3.5.1Hibernate的初始化
3.5.2Hibernate的遗留初始化方式
3.5.3访问Hibernate的Session接口
3.6运行helloapp应用
3.6.1创建用于运行本书范例的系统环境
3.6.2创建helloapp应用的目录结构
3.6.3把helloapp应用作为独立应用程序运行
3.6.4把helloapp应用作为Java Web应用运行
3.7小结
3.8思考题
第4章使用注解和JPA
4.1创建包含注解的持久化类
4.2方式一: 注解和Hibernate API
4.2.1创建Hibernate配置文件
4.2.2自动创建数据库表
4.2.3使用Hibernate API
4.3方式二: 注解和JPA API
4.3.1创建JPA的配置文件
4.3.2使用JPA API
4.3.3从JPA API中获得Hibernate API
4.4方式三: 对象关系映射文件和JPA API
4.5小结
4.6思考题
第5章对象关系映射基础
5.1持久化类的属性及访问方法
5.1.1基本类型属性和包装类型属性
5.1.2访问持久化类属性的方式
5.1.3在持久化类的访问方法中加入程序逻辑
5.1.4设置派生属性
5.1.5控制insert和update语句
5.1.6映射枚举类型
5.2处理SQL引用标识符
5.3创建命名策略
5.4设置数据库Schema
5.5运行范例程序
5.6使用Hibernate的对象关系映射文件
5.6.1设置访问持久化类属性的方式
5.6.2映射Customer类的虚拟name属性
5.6.3忽略Customer类的avgPrice属性
5.6.4映射Customer类的sex属性
5.6.5映射Customer类的totalPrice派生属性
5.6.6控制insert和update语句
5.6.7映射Customer类的description属性
5.6.8设置自定义的命名策略
5.6.9设置数据库Schema
5.6.10设置类的包名
5.7小结
5.8思考题
第6章映射对象标识符
6.1关系数据库按主键区分不同的记录
6.1.1把主键定义为自动增长标识符类型
6.1.2从序列(Sequence)中获取自动增长的标识符
6.2Java语言按内存地址区分不同的对象
6.3Hibernate用对象标识符(OID)来区分对象
6.4Hibernate的内置标识符生成器的用法
6.4.1increment标识符生成器
6.4.2identity标识符生成器
6.4.3sequence标识符生成器
6.4.4table标识符生成器
6.4.5auto标识符生成器
6.5映射自然主键
6.5.1映射单个自然主键
6.5.2映射复合自然主键
6.6映射派生主键
6.7使用Hibernate的对象关系映射文件
6.7.1increment标识符生成器
6.7.2identity标识符生成器
6.7.3sequence标识符生成器
6.7.4auto(native)标识符生成器
6.7.5映射单个自然主键
6.7.6映射复合自然主键
6.7.7映射派生主键
6.8小结
6.9思考题
XII
XIII
第7章映射一对多关联关系
7.1映射多对一单向关联关系
7.1.1TransientPropertyValueException异常
7.1.2级联持久化
7.2映射一对多双向关联关系
7.2.1建立持久化对象之间的关联关系
7.2.2级联删除
7.2.3父子关系
7.3映射一对多双向自身关联关系
7.4改进持久化类
7.5使用Hibernate的对象关系映射文件
7.5.1映射多对一单向关联关系
7.5.2映射一对多双向关联关系
7.5.3映射一对多双向自身关联关系
7.6小结
7.7思考题
第8章通过JPA和Hibernate操纵对象(上)
8.1Java对象在JVM中的生命周期
8.2理解持久化缓存
8.2.1持久化缓存的作用
8.2.2脏检查及清理缓存的机制
8.3Java对象在持久化层的状态
8.3.1临时对象(Transient Object)的特征
8.3.2持久化对象(Persistent Object)的特征
8.3.3被删除对象(Removed Object)的特征
8.3.4游离对象(Detached Object)的特征
8.4Session接口的用法
8.4.1Session的save()方法和persist()方法
8.4.2Session的load()方法和get()方法
8.4.3Session的update()方法
8.4.4Session的saveOrUpdate()方法
8.4.5Session的merge()方法
8.4.6Session的delete()方法
8.4.7Session的replicate()方法
8.4.8Session的byId()方法
8.4.9Session的refresh()方法
8.5EntityManager接口的用法
8.6通过Hibernate API级联操纵对象图
8.6.1级联保存临时对象
8.6.2更新持久化对象
8.6.3持久化临时对象
8.6.4更新游离对象
8.6.5遍历对象图
8.7通过JPA API级联操纵对象图
8.8小结
8.9思考题
第9章通过JPA和Hibernate操纵对象(下)
9.1与触发器协同工作
9.2利用拦截器(Interceptor)生成审计日志
9.3Hibernate的事件处理API
9.4利用Hibernate的Envers生成审计日志
9.5JPA的事件处理API
9.6批量处理数据
9.6.1通过EntityManger或Session来进行批量操作
9.6.2通过StatelessSession来进行批量操作
9.6.3通过JPQL来进行批量操作
9.6.4直接通过JDBC API来进行批量操作
9.7通过JPA访问元数据
9.8调用存储过程
9.9小结
9.10思考题
第10章映射组成关系
10.1建立精粒度对象模型
10.2建立粗粒度关系数据模型
10.3映射组成关系
10.3.1区分值(Value)类型和实体(Entity)类型
10.3.2在应用程序中访问具有组成关系的持久化类
10.4映射复合组成关系
10.5使用Hibernate的对象关系映射文件
10.5.1映射组成关系
10.5.2映射复合组成关系
10.6小结
10.7思考题
XIV
XV
第11章Hibernate的映射类型
11.1Hibernate的内置映射类型
11.1.1Java基本类型以及数字类型的Hibernate映射类型
11.1.2Java时间和日期类型的Hibernate映射类型
11.1.3Java大对象类型的Hibernate映射类型
11.1.4JDK自带的个别Java类的Hibernate映射类型
11.1.5使用Hibernate内置映射类型
11.2客户化映射类型
11.2.1用客户化映射类型取代Hibernate组件
11.2.2用UserType映射枚举类型
11.2.3实现CompositeUserType接口
11.2.4运行本节范例程序
11.3使用JPA Converter(类型转换器)
11.4操纵Blob和Clob类型数据
11.5小结
11.6思考题
第12章映射继承关系
12.1继承关系树的每个具体类对应一个表
12.1.1用注解来映射
12.1.2用对象关系映射文件来映射
12.1.3操纵持久化对象
12.1.4其他映射方式
12.2继承关系树的根类对应一个表
12.2.1用注解来映射
12.2.2用对象关系映射文件来映射
12.2.3操纵持久化对象
12.3继承关系树的每个类对应一个表
12.3.1用注解来映射
12.3.2用对象关系映射文件来映射
12.3.3操纵持久化对象
12.4选择继承关系的映射方式
12.5映射复杂的继承树
12.5.1用注解来映射
12.5.2用对象关系映射文件来映射
12.6映射多对一多态关联
12.7小结
12.8思考题
第13章Java集合类
13.1Set(集)
13.1.1Set的一般用法
13.1.2HashSet类
13.1.3TreeSet类
13.1.4向Set中加入持久化类的对象
13.2List(列表)
13.3Map(映射)
13.4小结
13.5思考题
第14章映射值类型集合
14.1映射Set(集)
14.2映射Bag(包)
14.3映射List(列表)
14.4映射Map(映射)
14.5对集合排序
14.5.1在数据库中对集合排序
14.5.2在内存中对集合排序
14.6映射组件类型集合
14.7小结
14.8思考题
第15章映射实体关联关系
15.1映射一对一关联
15.1.1按照外键映射
15.1.2按照主键映射
15.2映射单向多对多关联
15.3映射双向多对多关联关系
15.3.1用@ManyToMany注解映射双向关联
15.3.2使用组件类集合
15.3.3把多对多关联分解为两个一对多关联
15.4小结
15.5思考题
XVI
XVII
第16章Hibernate的检索策略
16.1Hibernate的检索策略简介
16.2类级别的检索策略
16.2.1立即检索
16.2.2延迟检索
16.3一对多和多对多关联的检索策略
16.3.1立即检索(FetchType.EAGER)
16.3.2多查询语句立即检索(FetchMode.SELECT)
16.3.3延迟检索(FetchType.LAZY)
16.3.4增强延迟检索(LazyCollectionOption.EXTRA)
16.3.5批量检索(@BatchSize注解)
16.3.6使用子查询语句(FetchMode.SUBSELECT)
16.4多对一和一对一关联的检索策略
16.4.1立即检索(FetchType.EAGER)
16.4.2延迟检索(FetchType.LAZY)
16.4.3无代理延迟检索
16.4.4批量检索(@BatchSize注解)
16.5控制左外连接检索的深度
16.6在程序中动态指定立即左外连接检索
16.7定义和检索对象图
16.8用@FecthProfile注解指定检索规则
16.9属性级别的检索策略
16.10小结
16.11思考题
第17章检索数据API(上)
17.1检索方式简介
17.1.1JPQL检索方式
17.1.2QBC检索方式
17.1.3本地SQL检索方式
17.1.4关于本章范例程序
17.1.5使用别名
17.1.6多态查询
17.1.7对查询结果排序
17.1.8分页查询
17.1.9检索单个对象(getSingleResult()方法)
17.1.10按主键依次处理查询结果(属于Hibernate的功能)
17.1.11可滚动的结果集(属于Hibernate的功能)
17.1.12绑定参数
17.1.13设置查询附属事项
17.1.14定义命名查询语句
17.1.15调用函数
17.1.16元模型类(MetaModel Class)
17.2设定查询条件
17.2.1比较运算
17.2.2范围运算
17.2.3字符串模式匹配
17.2.4逻辑运算
17.2.5集合运算
17.2.6case when语句
17.3小结
17.4思考题
第18章检索数据API(下)
18.1连接查询
18.1.1默认情况下关联级别的运行时检索策略
18.1.2立即左外连接
18.1.3左外连接
18.1.4立即内连接
18.1.5内连接
18.1.6立即右外连接
18.1.7右外连接
18.1.8交叉连接
18.1.9隐式连接
18.1.10关联级别运行时的检索策略
18.1.11用Tuple包装查询结果
18.2投影查询
18.2.1用JavaBean包装查询结果
18.2.2过滤查询结果中的重复元素
18.3报表查询
18.3.1使用聚集函数
18.3.2分组查询
18.3.3优化报表查询的性能
18.4高级查询技巧
18.4.1动态查询
18.4.2集合过滤
18.4.3子查询
18.4.4本地SQL查询
18.5查询性能优化
18.5.1Hibernate API中Query接口的iterate()方法
18.5.2Hibernate的查询缓存
18.6小结
18.7思考题
XVIII
XIX
第19章Hibernate高级配置
19.1配置数据库连接池
19.1.1使用默认的数据库连接池
19.1.2使用配置文件指定的数据库连接池
19.1.3从容器中获得数据源
19.1.4由Java应用本身提供数据库连接
19.2配置事务类型
19.3把SessionFactory与JNDI绑定
19.4配置JNDI
19.5配置日志
19.6使用XML格式的配置文件
19.7小结
19.8思考题
第20章声明数据库事务
20.1数据库事务的概念
20.2声明事务边界的方式
20.3在mysql.exe客户程序中声明事务
20.4Java应用通过JDBC API声明JDBC事务
20.5Java应用通过Hibernate API声明JDBC事务
20.5.1处理异常
20.5.2Session与事务的关系
20.5.3设定事务超时
20.6Java应用通过Hibernate API声明JTA事务
20.7Java应用通过JTA API声明JTA事务
20.8小结
20.9思考题
第21章处理并发问题
21.1多个事务并发运行时的并发问题
21.1.1类丢失更新
21.1.2脏读
21.1.3虚读
21.1.4不可重复读
21.1.5第二类丢失更新
21.2数据库系统的锁的基本原理
21.2.1锁的多粒度性及自动锁升级
21.2.2锁的类型和兼容性
21.2.3死锁及其防止办法
21.3数据库的事务隔离级别
21.3.1在mysql.exe程序中设置隔离级别
21.3.2在应用程序中设置隔离级别
21.4在应用程序中采用悲观锁
21.4.1利用数据库系统的独占锁来实现悲观锁
21.4.2由应用程序实现悲观锁
21.5利用版本控制来实现乐观锁
21.5.1使用整数类型的版本控制属性
21.5.2使用时间戳类型的版本控制属性
21.5.3为持久化对象设置锁
21.5.4强制更新版本
21.6实现乐观锁的其他方法
21.7小结
21.8思考题
第22章管理Hibernate的缓存
22.1缓存的基本原理
22.1.1持久化层的缓存的范围
22.1.2持久化层的缓存的并发访问策略
22.2Hibernate的二级缓存结构
22.3管理Hibernate的级缓存
22.4管理Hibernate的第二级缓存
22.4.1获得EHCache缓存插件的类库
22.4.2在persistence.xml文件中配置第二级缓存
22.4.3在持久化类中启用实体数据缓存、自然主键缓存和集合缓存
22.4.4设置EHCache的ehcache.xml配置文件
22.4.5获取第二级缓存的统计信息
22.4.6设置第二级缓存的读写模式
22.4.7在程序中控制第二级缓存
22.4.8查询缓存
22.5小结
22.6思考题
XX
XXI
第23章管理Session和实现对话
23.1管理Session对象的生命周期
23.1.1Session对象的生命周期与本地线程绑定
23.1.2Session对象的生命周期与JTA事务绑定
23.2实现对话
23.2.1使用游离对象
23.2.2使用手动清理缓存模式下的Session
23.2.3通过JPA API来实现对话
23.3小结
23.4思考题
第24章Spring、JPA与Hibernate整合
24.1本章范例所涉及软件的Java类库
24.2设置Spring的配置文件
24.3编写本章范例的Java类
24.3.1编写Customer实体类
24.3.2编写CustomerDao数据访问接口和类
24.3.3编写CustomerService业务逻辑服务接口和类
24.3.4编写测试类Tester
24.4小结
第25章运用Spring和Hibernate创建购物网站
25.1实现业务数据
25.2实现业务逻辑
25.3控制层访问模型层
25.4netstore应用的订单业务
25.5小结
附录A标准SQL语言的用法
A.1数据完整性
A.1.1实体完整性
A.1.2域完整性
A.1.3参照完整性
A.2DDL数据定义语言
A.3DML数据操纵语言
A.4DQL数据查询语言
A.4.1简单查询
A.4.2连接查询
A.4.3子查询
A.4.4联合查询
A.4.5报表查询
附录BJava语言的反射机制
附录C发布和运行netstore应用
附录D思考题答案
附录E书中涉及软件获取途径
第1章Java应用分层架构及软件模型
1.1应用程序的分层体系结构
1.1.1区分物理分层和逻辑分层
1.1.2软件层的特征
1.1.3软件分层的优点
1.1.4软件分层的缺点
1.1.5Java应用的持久化层
1.2软件的模型
1.2.1概念模型
1.2.2关系数据模型
1.2.3域模型
1.3小结
1.4思考题
第2章Java对象持久化技术概述
2.1直接通过JDBC API来持久化实体域对象
2.2ORM简介
2.2.1对象关系映射的概念
2.2.2描述对象关系映射信息的元数据
2.2.3访问ORM中间件的API
2.2.4常用的ORM中间件
2.3实体域对象的其他持久化模式
2.3.1主动域对象模式
2.3.2CMP模式
2.3.3运用ORM的JPA模式
2.4小结
2.5思考题
第3章个helloapp应用
3.1创建Hibernate的配置文件
3.1.1用Java属性文件作为Hibernate配置文件
3.1.2XML格式的Hibernate配置文件
3.2创建持久化类
3.3创建数据库Schema
3.4创建对象关系映射文件
X
XI
3.4.1映射文件的文档类型定义(DTD)
3.4.2把Customer持久化类映射到CUSTOMERS表
3.5通过Hibernate API操纵数据库
3.5.1Hibernate的初始化
3.5.2Hibernate的遗留初始化方式
3.5.3访问Hibernate的Session接口
3.6运行helloapp应用
3.6.1创建用于运行本书范例的系统环境
3.6.2创建helloapp应用的目录结构
3.6.3把helloapp应用作为独立应用程序运行
3.6.4把helloapp应用作为Java Web应用运行
3.7小结
3.8思考题
第4章使用注解和JPA
4.1创建包含注解的持久化类
4.2方式一: 注解和Hibernate API
4.2.1创建Hibernate配置文件
4.2.2自动创建数据库表
4.2.3使用Hibernate API
4.3方式二: 注解和JPA API
4.3.1创建JPA的配置文件
4.3.2使用JPA API
4.3.3从JPA API中获得Hibernate API
4.4方式三: 对象关系映射文件和JPA API
4.5小结
4.6思考题
第5章对象关系映射基础
5.1持久化类的属性及访问方法
5.1.1基本类型属性和包装类型属性
5.1.2访问持久化类属性的方式
5.1.3在持久化类的访问方法中加入程序逻辑
5.1.4设置派生属性
5.1.5控制insert和update语句
5.1.6映射枚举类型
5.2处理SQL引用标识符
5.3创建命名策略
5.4设置数据库Schema
5.5运行范例程序
5.6使用Hibernate的对象关系映射文件
5.6.1设置访问持久化类属性的方式
5.6.2映射Customer类的虚拟name属性
5.6.3忽略Customer类的avgPrice属性
5.6.4映射Customer类的sex属性
5.6.5映射Customer类的totalPrice派生属性
5.6.6控制insert和update语句
5.6.7映射Customer类的description属性
5.6.8设置自定义的命名策略
5.6.9设置数据库Schema
5.6.10设置类的包名
5.7小结
5.8思考题
第6章映射对象标识符
6.1关系数据库按主键区分不同的记录
6.1.1把主键定义为自动增长标识符类型
6.1.2从序列(Sequence)中获取自动增长的标识符
6.2Java语言按内存地址区分不同的对象
6.3Hibernate用对象标识符(OID)来区分对象
6.4Hibernate的内置标识符生成器的用法
6.4.1increment标识符生成器
6.4.2identity标识符生成器
6.4.3sequence标识符生成器
6.4.4table标识符生成器
6.4.5auto标识符生成器
6.5映射自然主键
6.5.1映射单个自然主键
6.5.2映射复合自然主键
6.6映射派生主键
6.7使用Hibernate的对象关系映射文件
6.7.1increment标识符生成器
6.7.2identity标识符生成器
6.7.3sequence标识符生成器
6.7.4auto(native)标识符生成器
6.7.5映射单个自然主键
6.7.6映射复合自然主键
6.7.7映射派生主键
6.8小结
6.9思考题
XII
XIII
第7章映射一对多关联关系
7.1映射多对一单向关联关系
7.1.1TransientPropertyValueException异常
7.1.2级联持久化
7.2映射一对多双向关联关系
7.2.1建立持久化对象之间的关联关系
7.2.2级联删除
7.2.3父子关系
7.3映射一对多双向自身关联关系
7.4改进持久化类
7.5使用Hibernate的对象关系映射文件
7.5.1映射多对一单向关联关系
7.5.2映射一对多双向关联关系
7.5.3映射一对多双向自身关联关系
7.6小结
7.7思考题
第8章通过JPA和Hibernate操纵对象(上)
8.1Java对象在JVM中的生命周期
8.2理解持久化缓存
8.2.1持久化缓存的作用
8.2.2脏检查及清理缓存的机制
8.3Java对象在持久化层的状态
8.3.1临时对象(Transient Object)的特征
8.3.2持久化对象(Persistent Object)的特征
8.3.3被删除对象(Removed Object)的特征
8.3.4游离对象(Detached Object)的特征
8.4Session接口的用法
8.4.1Session的save()方法和persist()方法
8.4.2Session的load()方法和get()方法
8.4.3Session的update()方法
8.4.4Session的saveOrUpdate()方法
8.4.5Session的merge()方法
8.4.6Session的delete()方法
8.4.7Session的replicate()方法
8.4.8Session的byId()方法
8.4.9Session的refresh()方法
8.5EntityManager接口的用法
8.6通过Hibernate API级联操纵对象图
8.6.1级联保存临时对象
8.6.2更新持久化对象
8.6.3持久化临时对象
8.6.4更新游离对象
8.6.5遍历对象图
8.7通过JPA API级联操纵对象图
8.8小结
8.9思考题
第9章通过JPA和Hibernate操纵对象(下)
9.1与触发器协同工作
9.2利用拦截器(Interceptor)生成审计日志
9.3Hibernate的事件处理API
9.4利用Hibernate的Envers生成审计日志
9.5JPA的事件处理API
9.6批量处理数据
9.6.1通过EntityManger或Session来进行批量操作
9.6.2通过StatelessSession来进行批量操作
9.6.3通过JPQL来进行批量操作
9.6.4直接通过JDBC API来进行批量操作
9.7通过JPA访问元数据
9.8调用存储过程
9.9小结
9.10思考题
第10章映射组成关系
10.1建立精粒度对象模型
10.2建立粗粒度关系数据模型
10.3映射组成关系
10.3.1区分值(Value)类型和实体(Entity)类型
10.3.2在应用程序中访问具有组成关系的持久化类
10.4映射复合组成关系
10.5使用Hibernate的对象关系映射文件
10.5.1映射组成关系
10.5.2映射复合组成关系
10.6小结
10.7思考题
XIV
XV
第11章Hibernate的映射类型
11.1Hibernate的内置映射类型
11.1.1Java基本类型以及数字类型的Hibernate映射类型
11.1.2Java时间和日期类型的Hibernate映射类型
11.1.3Java大对象类型的Hibernate映射类型
11.1.4JDK自带的个别Java类的Hibernate映射类型
11.1.5使用Hibernate内置映射类型
11.2客户化映射类型
11.2.1用客户化映射类型取代Hibernate组件
11.2.2用UserType映射枚举类型
11.2.3实现CompositeUserType接口
11.2.4运行本节范例程序
11.3使用JPA Converter(类型转换器)
11.4操纵Blob和Clob类型数据
11.5小结
11.6思考题
第12章映射继承关系
12.1继承关系树的每个具体类对应一个表
12.1.1用注解来映射
12.1.2用对象关系映射文件来映射
12.1.3操纵持久化对象
12.1.4其他映射方式
12.2继承关系树的根类对应一个表
12.2.1用注解来映射
12.2.2用对象关系映射文件来映射
12.2.3操纵持久化对象
12.3继承关系树的每个类对应一个表
12.3.1用注解来映射
12.3.2用对象关系映射文件来映射
12.3.3操纵持久化对象
12.4选择继承关系的映射方式
12.5映射复杂的继承树
12.5.1用注解来映射
12.5.2用对象关系映射文件来映射
12.6映射多对一多态关联
12.7小结
12.8思考题
第13章Java集合类
13.1Set(集)
13.1.1Set的一般用法
13.1.2HashSet类
13.1.3TreeSet类
13.1.4向Set中加入持久化类的对象
13.2List(列表)
13.3Map(映射)
13.4小结
13.5思考题
第14章映射值类型集合
14.1映射Set(集)
14.2映射Bag(包)
14.3映射List(列表)
14.4映射Map(映射)
14.5对集合排序
14.5.1在数据库中对集合排序
14.5.2在内存中对集合排序
14.6映射组件类型集合
14.7小结
14.8思考题
第15章映射实体关联关系
15.1映射一对一关联
15.1.1按照外键映射
15.1.2按照主键映射
15.2映射单向多对多关联
15.3映射双向多对多关联关系
15.3.1用@ManyToMany注解映射双向关联
15.3.2使用组件类集合
15.3.3把多对多关联分解为两个一对多关联
15.4小结
15.5思考题
XVI
XVII
第16章Hibernate的检索策略
16.1Hibernate的检索策略简介
16.2类级别的检索策略
16.2.1立即检索
16.2.2延迟检索
16.3一对多和多对多关联的检索策略
16.3.1立即检索(FetchType.EAGER)
16.3.2多查询语句立即检索(FetchMode.SELECT)
16.3.3延迟检索(FetchType.LAZY)
16.3.4增强延迟检索(LazyCollectionOption.EXTRA)
16.3.5批量检索(@BatchSize注解)
16.3.6使用子查询语句(FetchMode.SUBSELECT)
16.4多对一和一对一关联的检索策略
16.4.1立即检索(FetchType.EAGER)
16.4.2延迟检索(FetchType.LAZY)
16.4.3无代理延迟检索
16.4.4批量检索(@BatchSize注解)
16.5控制左外连接检索的深度
16.6在程序中动态指定立即左外连接检索
16.7定义和检索对象图
16.8用@FecthProfile注解指定检索规则
16.9属性级别的检索策略
16.10小结
16.11思考题
第17章检索数据API(上)
17.1检索方式简介
17.1.1JPQL检索方式
17.1.2QBC检索方式
17.1.3本地SQL检索方式
17.1.4关于本章范例程序
17.1.5使用别名
17.1.6多态查询
17.1.7对查询结果排序
17.1.8分页查询
17.1.9检索单个对象(getSingleResult()方法)
17.1.10按主键依次处理查询结果(属于Hibernate的功能)
17.1.11可滚动的结果集(属于Hibernate的功能)
17.1.12绑定参数
17.1.13设置查询附属事项
17.1.14定义命名查询语句
17.1.15调用函数
17.1.16元模型类(MetaModel Class)
17.2设定查询条件
17.2.1比较运算
17.2.2范围运算
17.2.3字符串模式匹配
17.2.4逻辑运算
17.2.5集合运算
17.2.6case when语句
17.3小结
17.4思考题
第18章检索数据API(下)
18.1连接查询
18.1.1默认情况下关联级别的运行时检索策略
18.1.2立即左外连接
18.1.3左外连接
18.1.4立即内连接
18.1.5内连接
18.1.6立即右外连接
18.1.7右外连接
18.1.8交叉连接
18.1.9隐式连接
18.1.10关联级别运行时的检索策略
18.1.11用Tuple包装查询结果
18.2投影查询
18.2.1用JavaBean包装查询结果
18.2.2过滤查询结果中的重复元素
18.3报表查询
18.3.1使用聚集函数
18.3.2分组查询
18.3.3优化报表查询的性能
18.4高级查询技巧
18.4.1动态查询
18.4.2集合过滤
18.4.3子查询
18.4.4本地SQL查询
18.5查询性能优化
18.5.1Hibernate API中Query接口的iterate()方法
18.5.2Hibernate的查询缓存
18.6小结
18.7思考题
XVIII
XIX
第19章Hibernate高级配置
19.1配置数据库连接池
19.1.1使用默认的数据库连接池
19.1.2使用配置文件指定的数据库连接池
19.1.3从容器中获得数据源
19.1.4由Java应用本身提供数据库连接
19.2配置事务类型
19.3把SessionFactory与JNDI绑定
19.4配置JNDI
19.5配置日志
19.6使用XML格式的配置文件
19.7小结
19.8思考题
第20章声明数据库事务
20.1数据库事务的概念
20.2声明事务边界的方式
20.3在mysql.exe客户程序中声明事务
20.4Java应用通过JDBC API声明JDBC事务
20.5Java应用通过Hibernate API声明JDBC事务
20.5.1处理异常
20.5.2Session与事务的关系
20.5.3设定事务超时
20.6Java应用通过Hibernate API声明JTA事务
20.7Java应用通过JTA API声明JTA事务
20.8小结
20.9思考题
第21章处理并发问题
21.1多个事务并发运行时的并发问题
21.1.1类丢失更新
21.1.2脏读
21.1.3虚读
21.1.4不可重复读
21.1.5第二类丢失更新
21.2数据库系统的锁的基本原理
21.2.1锁的多粒度性及自动锁升级
21.2.2锁的类型和兼容性
21.2.3死锁及其防止办法
21.3数据库的事务隔离级别
21.3.1在mysql.exe程序中设置隔离级别
21.3.2在应用程序中设置隔离级别
21.4在应用程序中采用悲观锁
21.4.1利用数据库系统的独占锁来实现悲观锁
21.4.2由应用程序实现悲观锁
21.5利用版本控制来实现乐观锁
21.5.1使用整数类型的版本控制属性
21.5.2使用时间戳类型的版本控制属性
21.5.3为持久化对象设置锁
21.5.4强制更新版本
21.6实现乐观锁的其他方法
21.7小结
21.8思考题
第22章管理Hibernate的缓存
22.1缓存的基本原理
22.1.1持久化层的缓存的范围
22.1.2持久化层的缓存的并发访问策略
22.2Hibernate的二级缓存结构
22.3管理Hibernate的级缓存
22.4管理Hibernate的第二级缓存
22.4.1获得EHCache缓存插件的类库
22.4.2在persistence.xml文件中配置第二级缓存
22.4.3在持久化类中启用实体数据缓存、自然主键缓存和集合缓存
22.4.4设置EHCache的ehcache.xml配置文件
22.4.5获取第二级缓存的统计信息
22.4.6设置第二级缓存的读写模式
22.4.7在程序中控制第二级缓存
22.4.8查询缓存
22.5小结
22.6思考题
XX
XXI
第23章管理Session和实现对话
23.1管理Session对象的生命周期
23.1.1Session对象的生命周期与本地线程绑定
23.1.2Session对象的生命周期与JTA事务绑定
23.2实现对话
23.2.1使用游离对象
23.2.2使用手动清理缓存模式下的Session
23.2.3通过JPA API来实现对话
23.3小结
23.4思考题
第24章Spring、JPA与Hibernate整合
24.1本章范例所涉及软件的Java类库
24.2设置Spring的配置文件
24.3编写本章范例的Java类
24.3.1编写Customer实体类
24.3.2编写CustomerDao数据访问接口和类
24.3.3编写CustomerService业务逻辑服务接口和类
24.3.4编写测试类Tester
24.4小结
第25章运用Spring和Hibernate创建购物网站
25.1实现业务数据
25.2实现业务逻辑
25.3控制层访问模型层
25.4netstore应用的订单业务
25.5小结
附录A标准SQL语言的用法
A.1数据完整性
A.1.1实体完整性
A.1.2域完整性
A.1.3参照完整性
A.2DDL数据定义语言
A.3DML数据操纵语言
A.4DQL数据查询语言
A.4.1简单查询
A.4.2连接查询
A.4.3子查询
A.4.4联合查询
A.4.5报表查询
附录BJava语言的反射机制
附录C发布和运行netstore应用
附录D思考题答案
附录E书中涉及软件获取途径
猜您喜欢