SpringBoot整合JPA案例

本节主要学习SpringBoot + JPA(底层使用Hibernate实现)集成案例 。
1.JPA概述1.1 JPA简介
JPA是JAVA Persistence API的简称 , 中文名Java持久化层API , 是JDK 5.0注解或XML描述对象-关系表的映射关系 , 并将运行期的实体对象持久化到数据库中 。Sun引入新的JPA ORM规范出于两个原因:其一 , 简化现有Java EE和Java SE应用开发工作;其二 , Sun希望整合ORM技术 , 实现天下归一 。
JPA吸取了目前Java持久化技术的优点 , 旨在规范、简化Java对象的持久化工作 。针对主流的ORM技术进行统一:Hibernate , mybatis , Toplink , JDO , OpenJPA 。
JPA是一种技术标准/规范 , 需要第三方ORM框架来具体支持 , 一般默认实现是Hibernate 。
ORM框架的思想:面向对象的思想与面向关系的数据库进行关联映射 。

SpringBoot整合JPA案例

文章插图
 
1.2 JPA与EJB关系
由于历史的原因 , EJB 3(Enterprise JavaBean 企业级JavaBean , 重量级框架 , 对标Spring框架)与JPA有着藕断丝连的关系 。EJB 2.X中 , EJB有三种类型的Bean , 分别是会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message Driven Bean) , 需要大型web服务器支持(Jboss , WebSphere , WebLogic) 。
随着EJB3规范的推出,EJB中的实体Bean(Enity Bean)逐渐被JPA规范所替代,这也是为什么JPA的规范会包含在EJB3的规范中的原因 。但JPA不仅能够在EJB环境中使用,也能够在J2SE的环境中使用,相对于EJB2.X的实体BEAN,使用的范围更广 。总之,简单的说,JPA虽然出自EJB3,但是其使用的范围却大于EJB3,不仅可以在JavaEE中,也可以在JavaSE的环境中 。
1.3 JPA优势与劣势
事实上 , JPA并不是一项技术 , 而是一种标准 , 因为JPA只是一套接口 , 本身不能完成任何事情 。JPA只是规范了Java持久化的官方标准 。JPA有以下几个优点:
可持久化Java对象:JPA能够直接持久化复杂的Java对象 , 并能够使用JPQL语言进行复杂的查询 。JPQL是JPA专用的查询语言 , 是类似于SQL的面向对象的查询语言 。
使用简单:JPA使用注释(Annotation)定义Java对象与关系数据库之间的映射 , 而传统的ORM多使用xml配置文件 。JPA使用起来比ORM要方便 。使用JPA不用关注底层使用什么数据库 。
规范标准化:JPA是JCP组织发布的 , 是Java官方规定的统一的API 。目前已经有多种框架实现JPA标准 。使用了JPA的系统可以自由选择遵循JPA标准的框架 , 并能够自由更换 。
事务性、大数据量:JPA底层使用关系数据库进行存储 , 因此具备关系数据库的特点 , 例如事务性、数据完整性、并发访问、大数据量等 。
数据库无关性:JPA开发的系统与具体的数据库关联性很小 , 可以自由的切换不同的数据库 , 而不用考虑不同数据库的差异性 。
【SpringBoot整合JPA案例】同时JPA也不是一项完美的技术 , 它本身也有一些劣势:
数据库优化问题:程序员只关注面向对象的操作而不能直接操作SQL语句(ORM关注对象与SQL语句转换) , 导致程序员针对特定数据库优化比较困难;
复杂查询问题:ORM框架擅长增删改 , 不擅长查询 , 特别是复杂查询 , 包括多表查询、子查询、层次查询、递归查询等 , 无法利用特定数据库的特性 。
对象关联映射问题:ORM框架涉及到对象关联映射(一对一 , 一对多 , 多对多) , 如果涉及到很多表 , 容易造成对象相互引用或死锁问题 。
系统性能问题:JPA具体实现 , 都是针对JDBC的重度封装 , 开发效率会很高 , 但是在实际维护中系统性能问题尤为突出 , 真所谓开发一时爽,维护火葬场


    推荐阅读