Spring Data JPA入门

1、Spring Data JPA是什么?

它是Spring基于ORM框架JPA规范封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展。学习并使用Spring Data JPA可以极大的提高开发效率

2、Spring Data JPA有什么?

主要看看Spring Data JPA提供的编程接口。

  • Repository:最顶层的接口, 是一个空接口,目的是为了统一所有的Repository的类型,且能让组件扫描的时候自动识别。
  • CrudRepository:Repository的子接口, 提供CRUD的功能。
  • PagingAndSortingRepository:CrudRepository的子接口,添加分页排序的功能。
  • JpaRepository:PagingAndSortingRepository的子接口,增加批量操作等功能。
  • JpaSpecificationExecutor:用来做复杂查询的解耦库。
接口继承关系图:
Spring Data JPA入门_第1张图片
接口继承关系图

3、添加、修改、删除操作

Spring Data JPA提供的JpaRepository接口包含了以下几个常用的方法:

  • delete 删除或者批量删除。
  • findAll 查找所有。
  • findOne 查找单个。
  • sava 保存单个或批量保存。
  • saveAndFlush 保存并刷新到数据库。

4、查询操作的基本实现

  • 基于方法名解析的概念
    JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现。
    例如:findByName这个方法表示从数据库中查询Name这个属性等于xxx的所有记录,类似于SQL语句:select * from xxTable where name=xxx这种形式。
    这里有两个重点:
    1、方法名需要在接口中定义。
    2、必须符合一定的命名规范。

  • 方法名构造规范
    构造法:find+全局修饰+By+实体的属性名称+限定词+连接词+(其它实体属性)+OrderBy+排序属性+排序方向
    例如:findDistinctFirstNameIgnoreCaseAndLastNameOrderByAgeDesc(String firstName, String lastName){...}
    其中:Distinct是全局修饰(非必须),FirstName和LastName是实体的属性名,And是连接词,IgnoreCase是限定词,Age是排序属性,Desc是排序方向,限定词和连接词统称为“关键词”。

  • 目前支持的关键词
    常用词如下:
    全局修饰:Distinct、Top、First。
    关键词:IsNull、IsNotNull、Like、NotLike、Containing、In、NotIn、IgnoreCase、Between、Equals、LessThan、GreaterThan、After、Before...
    排序方向:Asc、Desc。
    连接词:And、Or。
    更多关键词请查看官方在线文档:Spring Data JPA参考文档

  • 嵌套实体方法命名规则
    构造法:主实体中子实体的名称+_+子实体的属性名称
    例如:List findByAddress_ZipCode(ZipCode zipCode)
    它表示查询所有Address(地址)的zipCode(邮编)为指定值的所有Person(人员)列表。

【下一篇】:Spring Data JPA 实体详解

你可能感兴趣的:(Spring Data JPA入门)