Spring Data JPA从入门到精通(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-16 06:07:50

点击下载

作者:张振华

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Spring Data JPA从入门到精通

Spring Data JPA从入门到精通试读:

前言

本书初衷

随着Java技术和微服务技术逐渐广泛应用,Spring Cloud、Spring Boot逐渐统一Java的框架江湖。市场上的ORM框架也逐渐被人重视起来。Spring Data逐渐走入Java开发者的视野,被很多架构师作为ORM框架的技术选型。市场上没有对Spring Data JPA的完整介绍。资料比较零散,很难一下子全面、深入地掌握Spring Data JPA。本书注重从实际出发来提高从事Java开发者的工作效率,可以作为一本很好的自我学习手册和Spring Data JPA的查阅手册。“不仅授之以鱼,还授之以渔”,不仅告诉大家是什么、怎么用,还告诉大家学习步骤、怎么学习,以及原理、使用技巧与实践。全书以Spring Boot为技术基础,从入门到精通,由浅入深地介绍和使用Spring Data JPA,很适合Java的初学者从此弯道超车,走上Spring全家桶学习的快车道。“未来已经来临,只是尚未流行”

纵观市场上的ORM框架,MyBitas以灵活著称,但是要维护复杂的配置,并且不是Spring官方的天然全家桶,还得做额外的配置工作,即使是资深的架构师也得做很多封装;Hibernate以HQL和关系映射著称,但是使用起来不是特别灵活。这样Spring Data JPA来了,感觉要夺取ORM的JPA霸主地位了,它底层以Hibernate为封装,对外提供了超级灵活的使用接口,又非常符合面向对象和REST的风格,越来越多的API层面的封装都是以Spring Data JPA为基础的,感觉是架构师和开发者的福音。Spring Data JPA与Spring Boot配合起来使用具有天然的优势,你会发现越来越多的公司招聘会由传统的SSH、Spring、MyBitas技术要求逐步地变为Spring Boot、Spring Cloud、Spring Data等Spring 全家桶技术的要求。追本溯源

架构师在架构设计系统之前都要先设计各种业务模型、数据模型,其实在众多技术框架中,要掌握Spring Boot、Spring MVC、Spring Cloud、微服务架构等,都离不开底层数据库操作层,如果我们能很好地掌握Data这层的技术要领,从下往上学习,这样可能会更好掌握一些。本书特色(1)本书针对Java开发者、Spring的使用者,是Spring Data JPA开发必备书籍。(2)本书从介绍到使用再到原理和实践,可以作为一本很好的Spring Data JPA的实战手册。(3)本书的代码清晰,迭代完整,便于全面、完整地掌握和学习JPA。(4)本书注重从实战经验方面进行讲解,非常实用,一点即破。(5)本书原型PPT深受同事喜爱,并在企业内部培训的时候得到了很多Java程序员的肯定。阅读指南

本书以Spring Boot为开发基础和线索,大量采用了UML释义的讲解方式。本书分为3个部分,共12章。(1)基础部分:整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解,了解Spring Data JPA的基本使用和语法。(2)晋级之高级部分:JpaRepository详解、JPA的MVC扩展Rest支持、DataSource的配置、乐观锁等,了解其背后的实现动机及其原理。(3)延展部分:SpEL表达式在Spring Data里面的应用、Spring Data Redis实现cacheable的实践、IntelliJ IDEA加快开发效率、Spring Data Rest的介绍,直至整个Spring Data的生态。

另外,由于Spring Boot 2.0的版本Spring Data JPA有了一些变化,作者对Spring Boot 2.0中的JPA也做了一些总结,作为本书的配套阅读内容。可以通过扫描如下二维码查看:技术支持

本书示例源代码下载地址(注意数字与字母大小写)如下:

https://github.com/zhangzhenhuajack/spring-data-jpa-guide

如果下载有问题,请联系电子邮箱booksaga@163.com,邮件主题为“Spring Data JPA从入门到精通”。

虽然本书是以Spring Boot为配置案例的教程,但是实际工作中,我们可能用XML甚至是混合的模式,还有可能是MyBatis的方式,所以实战不免会超出本书范畴,欢迎加群进行讨论,一起进步。交流QQ群号如下:● QQ群一:240619787。● QQ群二:559701472。

作者本人的微信二维码如下:致谢

首先,感谢清华大学出版社各位编辑的辛勤劳动,得以让此书面世。其次,感谢家人对我的支持,特别是老婆大人在我写作过程中承担了大量的家务,比较辛苦。最后,特别感谢帮我写书评的行业技术大神们,也非常感谢日常工作中提供帮助的同事们以及技术社区的技术达人们,感谢大家提供的技术资料。著 者2018年3月第一部分基础部分

通过这一基础部分的几个章节,我们可以对JPA形成完整的认识,并掌握一些必须要掌握的概念和基础知识。第1章整体认识JPA“修学好古,实事求是”——《汉书·河间献王刘德传》图1-1

从整体到局部,先来整体认识一下Spring Data JPA。1.1 市场上ORM框架比对1.MyBatis

MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis。MyBatis着力于POJO与SQL之间的映射关系,可以进行更为细致的SQL,使用起来十分灵活,上手简单,容易掌握,所以深受开发者的喜欢,目前市场占有率最高,比较适合互联应用公司的API场景。2.Hibernate

Hibernate是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库,并且对象有自己的生命周期,着力对象与对象之间的关系,有自己的HQL查询语言,所以数据库移植性很好。Hibernate是完备的ORM框架,是符合JPA规范的。Hibernate有自己的缓存机制。从上手的角度来说比较难,比较适合企业级的应用系统开发。3.Spring Data JPA

可以理解为JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL(Java Persistence Query Language)查询语言,属于Spring整个生态体系的一部分。随着Spring Boot和Spring Cloud在市场上的流行,Spring Data JPA也逐渐进入大家的视野,它们组成有机的整体,使用起来比较方便,加快了开发的效率,使开发者不需要关心和配置更多的东西,完全可以沉浸在Spring的完整生态标准实现下。JPA上手简单,开发效率高,对对象的支持比较好,又有很大的灵活性,市场的认可度越来越高。1.2 JPA的介绍以及开源实现

JPA是Java Persistence API的简称,中文名为Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

JPA包括以下3方面的内容:(1)一套API标准。在javax.persistence的包下面,用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从烦琐的JDBC和SQL代码中解脱出来。(2)面向对象的查询语言:Java Persistence Query Language(JPQL)。这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。(3)ORM(object/relational metadata)元数据的映射。JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate 3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的实现,以及最后的Spring的整合Spring Data JPA。目前互联网公司和传统公司大量使用了JPA的开发标准规范,如图1-2所示。图1-21.3 了解Spring Data1.3.1 Spring Data介绍

Spring Data项目是从2010年发展起来的,从创立之初Spring Data就想提供一个大家熟悉的、一致的、基于Spring的数据访问编程模型,同时仍然保留底层数据存储的特殊特性。它可以轻松地让开发者使用数据访问技术,包括关系数据库、非关系数据库(NoSQL)和基于云的数据服务。

Spring Data Common是Spring Data所有模块的公用部分,该项目提供跨Spring数据项目的共享基础设施。它包含了技术中立的库接口以及一个坚持java类的元数据模型。

Spring Data不仅对传统的数据库访问技术JDBC、Hibernate、JDO、TopLick、JPA、Mybitas做了很好的支持、扩展、抽象、提供方便的API,还对NoSQL等非关系数据做了很好的支持,包括MongoDB、Redis、Apache Solr等。1.3.2 Spring Data的子项目

主要子项目(Main modules)如下:● Spring Data Commons● Spring Data Gemfire● Spring Data JPA● Spring Data KeyValue● Spring Data LDAP● Spring Data MongoDB● Spring Data REST● Spring Data Redis● Spring Data for Apache Cassandra● Spring Data for Apache Solr

社区支持的子项目(Community modules):● Spring Data Aerospike● Spring Data Couchbase● Spring Data DynamoDB● Spring Data Elasticsearch● Spring Data Hazelcast● Spring Data Jest● Spring Data Neo4j● Spring Data Vault

其他子项目(Related modules):● Spring Data JDBC Extensions● Spring for Apache Hadoop● Spring Content

当然,还有许多开源社区做出的贡献,比如Mybitas等。

市面上主要的子项目如图1-3所示。图1-31.3.3 Spring Data操作的主要特性

Spring Data项目旨在为大家提供一种通用的编码模式。数据访问对象实现了对物理数据层的抽象,为编写查询方法提供了方便。通过对象映射,实现域对象和持续化存储之间的转换,而模板提供的是对底层存储实体的访问实现,如图1-4所示。操作上主要有如下特征:● 提供模板操作,如Spring Data Redis和Spring Data Riak。● 强大的Repository和定制的数据存储对象的抽象映射。● 对数据访问对象的支持(Auting等)。图1-41.4 Spring Data JPA的主要类及结构图(1)我们需要掌握和使用到的类。

七个Repository接口:● Repository (org.springframework.data.repository)● CrudRepository (org.springframework.data.repository)● PagingAndSortingRepository (org.springframework.data.repository)● QueryByExampleExecutor (org.springframework.data.repository.query)● JpaRepository (org.springframework.data.jpa.repository)● JpaSpecificationExecutor (org.springframework.data.jpa.repository)● QueryDslPredicateExecutor (org.springframework.data.querydsl)

两个实现类:● SimpleJpaRepository (org.springframework.data.jpa.repository.support)● QueryDslJpaRepository (org.springframework.data.jpa.repository.support)(2)关系结构图如图1-5所示。图1-5

基本上都是我们要关心的类和接口,先做到心中大体有个数,后面章节我们会一一做讲解。(3)需要了解的类,真正的JPA的底层封装类。● EntityManager (javax.persistence)● EntityManagerImpl (org.hibernate.jpa.internal)1.5 MySQL的快速开发实例

以Spring Boot和Spring Jdbc为技术场景,选用MySQL来做一个实例。(1)环境要求:● JDK 1.8● Maven 3.0+● IntelliJ IDEA(2)第一步:创建数据库并建立user表。

① 创建一个数据的新用户并附上权限:

② 创建一个表:(3) 第二步:利用IntelliJ IDEA创建Example1,如图1-6、图1-7所示。图1-6图1-7

上面的信息是Maven的pom里面所需要的,都可以修改,如图1-8所示。图1-8

选择JPA、MySQL和Web,一路Next然后完成得到一个工程。完成后结构如图1-9所示。图1-9(4)第三步:创建或者修改application.properties文件。在工程的sources下面,如src/main/resources/application.properties。内容如下:(5)第四步:创建一个@Entity。文件为src/main/java/example/example1/User.java。(6)第五步:创建一个Repository。文件为src/main/java/example/example1/UserRepository.java。(7)第六步:创建一个Controller。(8)第七步:直接运行Example1Application的main函数。打开Example1Application,内容如下:

这时已经可以看到效果了。第2章JPA基础查询方法

学问之功,贵乎循序渐进,经久不息。——梁启超图2-1

本章学习Spring Data Common里面的公用基本方法。2.1 Spring Data Common的Repository

Repository位于Spring Data Common的lib里面,是Spring Data 里面做数据库操作的最底层的抽象接口、最顶级的父类,源码里面其实什么方法都没有,仅仅起到一个标识作用。管理域类以及域类的id类型作为类型参数,此接口主要作为标记接口捕获要使用的类型,并帮助你发现扩展此接口的接口。Spring底层做动态代理的时候发现只要是它的子类或者实现类,都代表储存库操作。

Repository的源码如下:

有了这个类,我们就能顺藤摸瓜,找到好多Spring Data JPA提供的基本接口和操作类,及其实现方法。这个接口定义了所有Repostory操作的实体和ID两个泛型参数。我们不需要继承任何接口,只要继承这个接口,就可以使用Spring JPA里面提供的很多约定的方法查询和注解查询,后面章节会详细介绍。2.2 Repository的类层次关系(diagms/hierarchy/structure)

我们来根据Repository这个基类顺藤摸瓜,看看Spring Data JPA里面都有些什么,顺便教大家学习的方法,这样不管碰到什么框架,学习方法都类似,自己可以逐步从入门到精通,提高学习效率。(1)我们用工具IntelliJ IDEA,打开类Repository.class,单击Navigate→Type Hierarchy。然后我们会得到如图2-2所示的视图。图2-2

通过这个层次结构视图,我们就会明白基类Repository的实现,对工程里面的所有Repository了如指掌,我们项目里面有哪些、Spring的项目里面有哪些也会一目了然。(2)通过IntelliJ IDEA打开类Example1里面的UserRepository.java,右击选择show diagrams,用图表的方式查看类的层次关系,如图2-3所示。图2-3(3)通过IntelliJ IDEA打开类QueryDslJpaRepository,右击,选择show diagrams,用图表的方式查看类的关系层次。打开的界面如图2-4所示。图2-4(4)通过IntelliJ IDEA打开类Example1里面的UserRepository.java,打开Navigate→File Structure,可以查看此类的结构以及有哪些方法。以此类推到其他类上。打开的界面如图2-5所示。图2-5

以上三种视图是开发过程中经常用到的视图。

我们来看一个Repository的实例:2.3 CrudRepository方法详解

通过类关系图可以看到CrudRepository提供了公共的通用的CRUD方法。2.3.1 CrudRepository interface内容(1)保存实体方法。我们通过刚才的类关系查看其他实现类。

SimpleJpaRepository里面的实现方法:

我们发现它是先检查传进去的实体是不是存在,然后判断是新增还是更新;是不是存在两种根据机制,一种是根据主键来判断,另一种是根据Version来判断(后面讲解Version的时候详解)。如果我们去看JPA控制台打印出来的SQL,最少会有两条,一条是查询,一条是insert或者update。(2)批量保存。原理和步骤(1)相同。实现方法就是for循环调用上面的save方法。(3)根据主键查询实体。(4)根据主键判断实体是否存在。(5)查询实体的所有列表。(6)根据主键列表查询实体列表。(7)查询总数。(8)根据主键删除。我们通过刚才的类关系查看其他实现类。

SimpleJpaRepository里面的实现方法:

我们看到JPA会先去查询一下,再做保存,不存在抛出异常。

这里特别强调一下delete和save方法,因为在实际工作中有的人会画蛇添足,自己先去查询再做判断处理,其实Spring JPA底层都已经考虑到了。2.3.2 CrudRepository interface的使用示例

使用也很简单,只需要自己的Repository继承CrudRepository即可。

第1章的示例我们修改如下:UserCrudRepository继承CrudRepository。

第1章的示例UserController修改如下:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载