程序天下--EJB JPA数据库持久层开发实践详解(含光盘)
分類: 图书,计算机/网络,程序设计,Java Java Script J2EE,
作者: 冯曼菲编著
出 版 社: 电子工业出版社
出版时间: 2008-5-1字数: 835000版次: 1页数: 508印刷时间: 2008/05/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787121062629包装: 平装编辑推荐
基于理论,注重实践。避免了大量的理论罗列,先使读者有了一定的感性认识,再继续深入,上升到理性,符合学习知识的客观过程。
内容翔实,实例丰富。不仅对JPA的理论进行了详细的讲解,而且辅以大量实例,使读者可以边学技术,边进行实践。
注重实际,应用为王。精心挑选的大量示例程序都是作者在实际开发中的经验总结,涵盖了实际开发中可能遇到的各种问题。
取材广泛,内容充实。覆盖JPA技术的各个方面,从最基本的简单概念到JPA高级应用的相关技术,再到JPA结合各种框架的使用,是对JPA内容体系的整体总结。
注重基础,高于基础。不仅对基础知识进行详解,还大量讲述了其基本实现原理。使读者不仅知道如何应用,而且能理解最本质的内容,从而便于以后更深入地学习。
内容简介
本书全面介绍了JPA(Java Persistence API)的相关知识。全书共分4篇,第1篇介绍了JPA产生的背景及JPA的运行环境、流行的开发工具IDE等;第2篇介绍了 JPA基本知识,包括映射实体、映射实体关系、实体管理器及JPQL的相关知识;第3篇进一步介绍了关于JPA的高级应用,包括持久化上下文、XML映射文件、打包和部署、JPA实现框架和与Spring集成等;第4篇介绍了三个完整案例,分别是学生成绩管理系统(Servlet+JPA)、宠物商店(Swing+JPA)、博客系统(Struts2+Spring2+JPA)。
本书结构清晰,注重实战,深入浅出,非常适合JPA开发人员学习使用,同时也可用做高校相关专业师生和社会培训班的教材。
作者简介
冯曼菲擅长Java企业级应用开发,拥有丰富的JavaEE企业级项目构建的经验,曾参与用友移动商街、M-ERP平台的技术架构的设计和开发。在多年从事大型项目的开发过程中积累了丰富的实战经验,并对UML、设计模式等都有较为深入的理解和应用,理论功底深厚,实践经验丰富。
目录
第一篇初识JPA
第1章JPA概述
1.1什么是数据持久化
1.2Java持久化技术
1.2.1序列化(Serialization)
1.2.2JDBC
1.2.3关系对象映射(ORM)
1.2.4对象数据库(ODB)
1.2.5Java数据对象(JDO)
1.2.6EJB 2.X
1.3JPA(Java Persistence API)概述
1.3.1什么是JPA
1.3.2JPA的历史
1.3.3下载JPA规范
1.3.4JPA的优势
1.3.5EJB 3与JPA的关系
1.3.6常见的实现JPA的框架
1.4对象关系映射(ORM)
1.4.1什么是对象关系映射
1.4.2对象关系映射模式
1.5本章小结
第2章搭建JPA开发和运行环境
2.1JBoss概述
2.1.1JBoss Application Server
2.1.2JBoss IDE for Eclipse
2.2JBoss应用服务器的搭建
2.2.1下载和安装JBoss服务器
2.2.2启动JBoss服务器
2.2.3停止JBoss服务器
2.2.4JBoss的文件目录结构
2.3JBoss IDE开发环境的搭建
2.3.1下载JBoss IDE for Eclipse
2.3.2Eclipse中配置JBoss
2.3.3Eclipse中启动和停止JBoss
2.4MySQL数据库的下载和安装
2.4.1MySQL数据库概述
2.4.2下载MySQL
2.4.3安装MySQL
2.4.4运行MySQL
2.4.5下载MySQL客户端
2.5本章小结
第3章JPA之初体验
3.1第一个Entity实体类
3.1.1第一个POJO类
3.1.2数据库中对应的表
3.1.3使用注释(Annotations)配置ORM映射
3.1.4配置persistence.xml
3.2第一个SessionBean
3.2.1定义Remote接口
3.2.2SessionBean类
3.3使用EntityManager操作实体
3.3.1依赖注入EntityManager
3.3.2添加Entity
3.3.3根据主键查找Entity
3.3.4更新Entity
3.3.5删除Entity
3.3.6执行查询
3.4部署EJB
3.4.1打EJB-JAR包
3.4.2部署EJB
3.4.3配置DataSource数据源
3.4.4启动JBoss服务器
3.4.5查看JBoss控制台JMX-Console
3.5调用EJB的Client
3.5.1TestClient类
3.5.2运行Client
3.6本章小结
第4章JPA开发工具
4.1Eclipse Dali JPA 概述
4.1.1什么是Dali JPA
4.1.2下载Dali JPA
4.1.3Dali JPA界面预览
4.2连接数据库
4.3开始JPA开发
4.3.1创建JPA项目
4.3.2创建持久化类
4.4本章小结
第二篇JPA进阶
第5章映射持久化对象(Entity)
5.1实体映射基础
5.1.1简单的POJO类
5.1.2映射实体(@Entity)
5.1.3无参的构造方法
5.1.4实现Serializable接口
5.1.5可继承性
5.1.6标注主键(@Id)
5.1.7默认实体映射
5.2映射表和字段
5.2.1映射表(@Table)
5.2.2映射方法和属性(@Column)
5.2.3可持久化的基本数据类型
5.2.4映射优化一:基本数据类型VS封装类
5.2.5映射优化二:@Basic设置加载方式
5.3主键映射
5.3.1主键标识(@Id)
5.3.2自增主键
5.3.3表生成器(@ TableGenerator)
5.3.4Sequence生成器(@ Sequence)
5.3.5Identity生成器
5.3.6复合主键(@IdClass)
5.3.7嵌入式主键(@EmbeddedId)
5.3.8几种主键生成策略的比较
5.4映射特殊类型
5.4.1映射Blob和Clob类型(@Lob)
5.4.2映射时间(Temporal)类型(@Temporal)
5.4.3映射枚举(Enumerated)型
5.5映射非持久化类型(@Transient)
5.6本章小结
第6章实体关系映射
6.1实体关系概述
6.1.1实体关系的方向性
6.1.2实体关系的数量性
6.2一对一(@OneToOne)
6.2.1单向关联(Unidirectional)
6.2.2一对一(@ OneToOne)
6.2.3关联指定列(@JoinColumn)
6.2.4双向关联(Bidirectional)
6.2.5主键关联(@PrimaryKeyJoinColumn)
6.2.6默认关联
6.2.7一对一映射的一般步骤
6.3一对多(@OneToMany)
6.3.1一对多模型(单向)
6.3.2映射策略 89
6.3.3映射策略——外键关联
6.3.4一对多(@OneToMany)
6.3.5映射策略——表关联
6.3.6表关联(@ JoinTable)
6.3.7默认关联
6.4多对一(@ManyToOne)
6.4.1多对一 模型(单向)
6.4.2映射策略——外键关联
6.4.3多对一(@ManyToOne)
6.4.4默认关联
6.5高级一对多和多对一映射
6.5.1双向关联模型
6.5.2双向关联
6.5.3一对多(多对一)映射的一般步骤
6.6多对多(@ManyToMany)
6.6.1多对多模型(单向)
6.6.2映射策略——表关联
6.6.3@ManyToMany
6.6.4双向关联模型
6.6.5默认关联
6.6.6多对多映射的一般步骤
6.7集合类的选择
6.7.1集合类的区别
6.7.2带排序的集合
6.7.3带Key值的集合
6.8关系映射示例:客户关系管理系统
6.8.1实体关系类图
6.8.2数据库表结构
6.8.3客户实体
6.8.4地址实体
6.8.5联系人实体
6.8.6头像实体
6.8.7电话实体
6.8.8订单实体
6.8.9订单明细实体
6.8.10产品实体
6.9本章小结
第7章实体映射的高级应用
7.1多表映射
7.1.1两个表映射为一个实体
7.1.2从表注释(@ SecondaryTable)
7.1.3多个表映射为一个实体
7.1.4多个从表注释(@ SecondaryTables)
7.2嵌入映射
7.2.1嵌入映射表结构
7.2.2嵌入类
7.2.3嵌入到实体
7.2.4映射属性(@AttributeOverride)
7.3实体的继承策略
7.3.1类结构关系图
7.3.2三种继承策略
7.3.3继承关系的实体保存在一个表(SINGLE_TABLE)
7.3.4每个实体子类保存在一个表(JOINED)
7.3.5每个实体类保存在一个表(TABLE_PER_CLASS)
7.3.6三种继承策略对比
7.4深入实体继承
7.4.1继承自抽象(abstract)实体类
7.4.2继承自非映射实体类(Mapped Superclasses)
7.4.3继承自非实体类
7.4.4继承的设计重构
7.4.5带继承关系的实体查询(多态)
7.5本章小结
第8章实体管理器(EntityManager)
8.1实体管理器概述
8.1.1什么是实体管理器
8.1.2Entity Manager API
8.1.3EntityManager方法详解
8.2操作实体(CRUD)
8.2.1创建实体(持久化)
8.2.2持久化带关系的实体
8.2.3根据主键查找实体
8.2.4实体属性及实体的加载方式
8.2.5更新实体
8.2.6更新实体关系
8.2.7删除实体
8.2.8删除关联的实体
8.3实体的生命周期
8.3.1实体的几种状态
8.3.2瞬时状态(Transient)
8.3.3持久化状态(Persisted)
8.3.4托管状态(Attatched或Managed)
8.3.5游离状态(Detached)
8.3.6销毁状态(Removed)
8.3.7分析实体状态实例
8.4实体的高级操作
8.4.1实体的联级操作
8.4.2获得实体的另一种方式
8.4.3同步数据库(flush与flushType)
8.4.4refresh()和clear()方法
8.5实体监听器(Listener)
8.5.1回调事件(Callback Events)
8.5.2监听器定义在实体中
8.5.3监听器定义在实体外
8.5.4默认实体监听器
8.5.5继承中的实体监听器
8.5.6监听器的调用顺序
8.5.7几种监听实体方式的比较
8.6本章小结
第9章查询(Query)
9.1Query 概述
9.1.1一个简单的查询示例
9.1.2Query API
9.1.3Query 方法详解
9.1.4Query的简化写法
9.2JPQL入门
9.2.1查询实体
9.2.2查询实体属性
9.2.3查询关联实体
9.3准备查询
9.3.1查询参数方法一——命名设置参数
9.3.2查询参数方法二——位置设置参数
9.3.3不带参数的查询
9.3.4查询策略的选择
9.3.5分页查询
9.3.6设置提示(Hints)
9.3.7设置提交模式(FlushMode)
9.4命名查询(Named Query)
9.4.1命名查询示例
9.4.2定义查询命名
9.4.3@NamedQuery注释
9.5查询结果的处理
9.5.1执行查询
9.5.2查询结果的类型
9.5.3查询结果为实体
9.5.4查询结果为基本数据类型
9.5.5查询结果为数组
9.5.6查询结果为自定义对象
9.6本地查询(Native Query)
9.6.1本地查询概述
9.6.2执行本地查询
9.6.3查询结果与实体映射
9.6.4自定义查询映射
9.6.5@SqlResultSetMapping
9.6.6@NamedNativeQuery本地命名查询
9.7查询技巧
9.7.1日期类型的查询
9.7.2动态查询
9.8本章小结
第10章查询语言(JPQL)
10.1JPQL基础
10.1.1JPQL基本语法
10.1.2SELECT子句
10.1.3继承实体的查询
10.2FROM语句
10.2.1FROM基本语法
10.2.2基于集合实体的查询(关联查询)
10.2.3关联查询
10.2.4内连接(INNER JOIN)
10.2.5左连接(LEFT JOIN)
10.2.6抓取连接(FETCH JOIN)
10.2.7唯一性查询(DISTINCT)
10.3WHERE语句
10.3.1WHERE基本语法
10.3.2直接量(Literals)
10.3.3查询条件操作符优先级
10.3.4算术操作符(Arithmetic Operators)
10.3.5逻辑操作符(Logic Operators)
10.3.6比较操作符(Comparison Operators)
10.3.7BETWEEN操作符
10.3.8IN操作符
10.3.9LIKE操作符
10.3.10NULL操作符
10.3.11EMPTY操作符
10.3.12MEMBER OF操作符
10.4函数表达式
10.4.1字符串函数
10.4.2数值函数
10.4.3日期函数
10.5子查询
10.5.1基本子查询
10.5.2EXISTS表达式
10.5.3ALL和ANY表达式
10.6分组查询
10.6.1分组查询基本语法
10.6.2分组查询函数
10.7ORDER BY表达式
10.8批量操作
10.8.1批量更新
10.8.2批量删除
10.8.3执行批量操作
10.9本章小结
第三篇JPA高级应用
第11章持久化上下文
11.1获得EntityManager对象
11.1.1Java EE环境与J2SE环境
11.1.2两种类型的EntityManager对象
11.1.3容器托管的(container-managed)EntityManager对象
11.1.4应用托管的(application-managed)EntityManager对象
11.1.5ThreadLocal的使用
11.2实体管理器工厂(EntityManagerFactory)
11.2.1javax.persistenc.Persistence API
11.2.2EntityManagerFactory API
11.2.3实现自己的JPA
11.3容器托管的EntityManager持久化上下文
11.3.1事务范围TRANSACTION
11.3.2扩展范围EXTENDED
11.4事务管理
11.4.1事务与EntityManager
11.4.2JTA管理事务
11.4.3RESOURCE_LOCAL管理事务
11.4.4EntityTransaction API
11.5应用托管的EntityManager的持久化上下文
11.5.1无状态的会话Bean与JTA事务(事务范围)
11.5.2无状态的会话Bean与JTA事务(扩展范围)
11.5.3有状态的会话Bean与JTA事务
11.5.4RESOURCE_LOCAL事务
11.6本章小结
第12章XML映射文件
12.1XML映射配置VS注释
12.2映射文件概述
12.2.1映射文件的保存位置
12.2.2获取映射文件DTD
12.3映射基础
12.3.1映射文件的基本结构
12.3.2映射文件的基本元素
12.4配置注释
12.4.1禁用注释
12.4.2持久化单元的默认配置
12.5映射文件的默认配置
12.5.1默认包名
12.5.2默认schema
12.5.3默认catalog
12.5.4默认访问类型
12.6配置查询、生成器和查询结果
12.6.1sequence生成器
12.6.2表生成器
12.6.3命名查询
12.6.4本地命名查询
12.6.5查询结果映射
2.7配置实体
12.7.1基本配置
12.7.2配置表
12.7.3配置从表
12.7.4配置属性
12.7.5配置实体关系
12.8配置继承
12.8.1配置所有实体保存为一个表(SINGLE_TABLE)
12.8.2每个实体子类保存在一个表(JOINED)
12.8.3配置非实体类
12.9配置嵌入类
12.9.1配置类
12.9.2和配置嵌入实体类
12.10配置实体监听器
12.10.1监听器定义在实体内
12.10.2监听器定义在实体外
12.10.3禁用父类监听器
12.10.4禁用默认监听器
12.11本章小结
第13章打包和部署
13.1Java EE应用打包概述
13.1.1Java EE包的类型
13.1.2EAR包结构
13.1.3EJB-JAR包结构
13.1.4WAR包结构
13.2Java EE类加载机制
13.2.1Java类加载器
13.2.2类加载顺序模型
13.2.3Java EE应用的加载顺序
13.2.4类加载原理示例
13.3 配置persistence.xml
13.3.1保存位置
13.3.2persistence.xml的基本结构
13.3.3配置持久化单元名称
13.3.4配置事务类型
13.3.5配置实现者
13.3.6配置数据源
13.3.7配置映射文件
13.3.8配置管理类
13.3.9配置自定义配置
13.4JPA打包最佳实践
13.4.1J2SE打包最佳实践
13.4.2J2EE打包最佳实践——与EJB组件
13.4.3J2EE打包最佳实践——与Web应用
13.5本章小结
第14章JPA实现框架
14.1Hibernate JPA
14.1.1Hibernate 与JPA
14.1.2Hibernate下载
14.1.3配置方式
14.1.4基本配置
14.1.5配置日志
14.1.6配置缓存
14.1.7配置JDBC和数据库
14.1.8其他的常用配置
14.2OpenJPA
14.2.1OpenJPA与JPA
14.2.2OpenJPA下载
14.2.3配置日志
14.2.4配置缓存
14.2.5配置JDBC和数据库
14.2.6增强器的使用(Enhancer)
14.3Toplink JPA
14.3.1Toplink 与JPA
14.3.2Toplink下载
14.3.3配置日志
14.3.4配置缓存
14.3.5配置JDBC和数据库
14.3.6配置DDL
14.3.7其他自定义配置
14.3.8配置查询优化
14.3.9加载优化
14.4本章小结
第15章JPA与Spring集成
15.1Spring概述
15.1.1什么是Spring
15.1.2Spring的特性
15.1.3Spring与JPA
15.2开始Spring之旅
15.2.1IoC容器
15.2.2普通的Bean
15.2.3容器管理的Bean
15.2.4在容器中运行
15.3Spring中集成JPA
15.3.1集成前的准备
15.3.2配置EntityManagerFactory
15.3.3配置事务Transaction
15.3.4运行程序
15.4Spring Web框架
15.4.1Spring Web概述
15.4.2配置Spring Web应用
15.4.3开始Spring Web之旅
15.5Spring Web集成JPA
15.5.1集成前的准备
15.5.2配置数据源
15.5.3注入业务逻辑
15.5.4运行程序
15.6本章小结
第四篇典型案例
第16章学生成绩管理系统(Servlet+JPA)
16.1系统概述
16.1.1需求描述
16.1.2系统预览
16.2系统构架
16.2.1系统结构
16.2.2CharacterFilter
16.2.3异常处理
16.3数据库设计
16.3.1数据表UML
16.3.2SQL脚本
16.4JPA实体设计
16.4.1JPA实体UML
16.4.2JPA实体类代码
16.4.3persistence.xml配置
16.4.4JPA实体的部署
16.5班级模块
16.5.1添加页面addClass.jsp
16.5.2添加班级
16.5.3使用标注获取EntityManagerFactory 380
16.5.4班级列表
16.5.5修改班级
16.5.6删除班级
16.6课程模块
16.6.1添加、删除、修改课程
16.6.2选择听课学生
16.7学生模块
16.7.1分页显示学生列表
16.7.2添加修改删除学生
16.8分数模块
16.8.1添加学生成绩
16.8.2列出学生成绩
16.9本章小结
第17章宠物商店 (Swing+JPA)
17.1系统概述
17.1.1需求描述
17.1.2系统预览
17.2系统构架
17.2.1系统构架
17.2.2实体类设计
17.2.3业务类实现
17.2.4Session Bean查找
17.2.5persistence.xml配置
17.2.6EJB3组件部署
17.3登录对话框
17.3.1登录对话框
17.3.2异常信息显示
17.4主购物窗口
17.4.1主购物窗口
17.4.2主购物窗口代码
17.4.3宠物列表Model
17.4.4添加宠物类别命令
17.4.5删除宠物类别命令
17.4.6添加宠物命令
17.5购买窗口
17.5.1购买对话框
17.5.2购物车对话框
17.5.3付款操作
17.6本章小结
第18章博客系统(Struts2+ Spring2+JPA)
18.1系统概述
18.1.1需求描述
18.1.2系统预览
18.2系统构架
18.2.1系统构架
18.2.2执行流程
18.3实体类设计
18.3.1基础实体BaseBean
18.3.2用户实体Person
18.3.3爱好实体Hobby
18.3.4博客实体Blog
18.3.5类别实体Category
18.3.6文章实体Post
18.3.7登录信息类PersonInfo
18.3.8persistence.xml
18.4业务模块设计
18.4.1DAO层接口
18.4.2DAO层实现
18.4.3公共Service层接口
18.4.4公共Service层实现
18.4.5用户Service接口
18.5用户模块
18.5.1BaseAction基础类
18.5.2用户注册
18.5.3struts.xml配置
18.5.4ApplicationContext.xml配置
18.5.5web.xml配置
18.5.6register.jsp
18.5.7header.jsp,footer.jsp
18.5.8注册表单验证
18.5.9异常处理
18.5.10用户照片文件上传
18.5.11用户登录注销
18.6博客模块
18.6.1开通博客
18.6.2浏览博客
18.7类别模块
18.7.1类别列表
18.7.2添加类别
18.7.3浏览类别
18.8文章模块
18.8.1列出文章
18.8.2添加文章
18.8.3浏览文章
18.9本章小结
附录AJPA ORM Annotation参考
附录B其他的JPA Annotation参考
书摘插图
第一篇初识JPA
第1章JPA概述
1.1什么是数据持久化
数据持久化,顾名思义就是把程序中的数据以栽种形式保存到到存储介质中,以达到持久化的目的。当程序运行时,一些数据是临时保存在内存中,一旦退出系统,这些数据就丢失了。如果使用某种手段将数据保存在硬盘或数据库,这了使退出系统后又重新启动系统,这些数据仍然可以重新找回来。
例如,管理员向一个用户管理系统中添加了一个用户的资料,那么这个系统需要将新添加的资料保存到数据库中,否则系统退出或电脑重启后该用户资料就会丢失。将数据从内存保存到数据库中,这便是数据的持久化。娄然,保存到数据库只是持久化方式中的一种,也可以保存在其他的永久存储介质中。
1.2Java持久化技术
在Java领域中,持久化也是企业应用开发中的一项必不可少的技术。Java社区在努力解决持久化数据管理的过程中,曾经涌现出了非常多试图解决这个问题的技术方案。从最早的序列化(Serialzation)到JDBC、关系对象映射(ORM)、对象数据库(ODB),再到IJB2.X、Java数据对象(JDO),一直到目前最新的Java持久化API (JPA).
1.2.1序列化(Serialization)
序列化(Serialzation)也叫串行化,是Java对象的机制。只要某个实现了java.io.Serializable接口,就能够使用java.io.ObjectOutputStream将该类对象以二进制字节码的形式写到硬盘上,并能使用java.io.ObjectOutputStream将该对象从硬盘上还原。这样,即使重启了机器,该Java对象也能够从硬盘上恢复。
对应简单的应用,可以使用序列化实现对Java对象的持久化。序列化的对象一般为普通的Java Bean。
……