一、思维导图
二、JPA的概念
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!
三、JPA注解:
四、JPA 的优点
- 无须依赖mybatis等框架,无xml。
- 适用于表相互关联性不大的场景,使用jpa会使项目更精简。
- java创建号实体及实体的表信息,运行项目,数据库中就会生成对应的表,使用jpa的项目有利于项目移植。
- dao接口继承Jpa的Repository后,就可以直接调用其已有方法进行数据表进行操作,如数据的增删改,分页,排序。
- 可直接根据id进行条件查询,指定列的条件查询只需要在dao中按jpa的语法(方法名驼峰命名),写个相关的抽象方法就可以使用查询功能了。
- 需要写hql的,可在dao中所需抽象方法上,使用对应注解(如-@Query…),注解的括号里书写相关hql。
五、缺点
- 分页时,起始值或起始值加分页大小超过总大小的话,会查不到数据。
- 复杂的查询场景使用起来比较费劲,比如条件搜索+分页+排序,需要Example、Sort、PageRequest类都使用方可。
- 注解式的hql中表名、列名不能是参数,不利于表查询的灵活使用。
- 注解式的hql中无分页语法。
- jpa在注解中使用原生sql时,会把所在方法的形参类型格式化,比如字符串会加上单引号。
- 分页不能与jpa Repository接口结合复用,比较费劲。
六、关键字
七、添加依赖
- 如果您已经勾选了 勾选SQL选项的 Spring Data JPA , MySQL,那么无须手动增加依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
八、JPA自带的几种主键生成策略
- TABLE: 使用一个特定的数据库表格来保存主键
- SEQUENCE: 根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator
指定生成主键使用的生成器(可能是orcale中自己编写的序列) - IDENTITY: 主键由数据库自动生成(主要是支持自动增长的数据库,如mysql)
- AUTO: 主键由程序控制,也是GenerationType的默认值
九、SpringBoot JPA提供的核心接口
-
Repository接口
-
CrudRepository接口
-
PagingAndSortingRepository接口
-
JpaRepository接口
-
JPASpecificationExecutor接口
十、Repository接口的使用
- 提供了方法名称命名查询方式
- 提供了基于@Query注解查询与更新