基于JPA的Repository使用详解

Spring Data JPA

Spring Data是Spring提供的操作数据的框架,Spring Data JPA是Spring Data的一个模块,通过Spring data 基于jpa标准操作数据的模块。

Spring Data的核心能力,就是基于JPA操作数据,并且可以简化操作持久层的代码。

它使用一个叫作Repository的接口类为基础,它被定义为访问底层数据模型的超级接口。而对于某种具体的数据访问操作,则在其子接口中定义。

Spring Data可以让我们只定义接口,只要遵循spring data的规范,就无需写实现类,不用写sql语句直接查询数据

Repository

基于JPA的Repository使用详解_第1张图片

 

  • Repository

    提供了findBy + 属性 方法

  • CrudRepository
    继承了Repository 提供了对数据的增删改查

  • PagingAndSortRepository

    继承了CrudRepository 提供了对数据的分页和排序,缺点是只能对所有的数据进行分页或者排序,不能做条件判断

  • JpaRepository

    继承了PagingAndSortRepository
    开发中经常使用的接口,主要继承了PagingAndSortRepository,对返回值类型做了适配

  • JpaSpecificationExecutor

    提供多条件查询

CrudRepository

CrudRepository继承Repository,添加了一组对数据的增删改查的方法
基于JPA的Repository使用详解_第2张图片

PagingAndSortingRepository

PagingAndSortingRepository继承CrudRepository,添加了一组分页排序相关的方法
在这里插入图片描述

JpaRepository

JpaRepository继承PagingAndSortingRepository,添加了一组JPA规范相关的方法。对继承父接口中方法的返回值进行了适配,因为在父类接口中通常都返回迭代器,需要我们自己进行强制类型转化。而在JpaRepository中,直接返回了List。

开发中最常用JpaRepository
基于JPA的Repository使用详解_第3张图片

JpaSpecificationExecutor

这个接口比较特殊,单独存在,没有继承以上接口。主要提供了多条件查询的支持,并且可以在查询中添加分页和排序。因为这个接口单独存在,因此需要配合以上说的接口使用。
基于JPA的Repository使用详解_第4张图片

JpaRepository查询功能

Jpa方法命名规则

JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下。
Keyword:关键字
Sample:举例
JPQL snippet: sql片段

Keyword Sample JPQL snippet
And findByNameAndPwd where name= ? and pwd =?
Or findByNameOrSex where name= ? or sex=?
Is,Equals findByNameOrSex where id= ?
Between findByIdBetween where id between ? and ?
LessThan findByIdLessThan where id < ?
LessThanEquals findByIdLessThanEquals where id <= ?
GreaterThanr findByIdGreaterThan where id > ?
GreaterThanEquals findByIdGreaterThanEquals where id > = ?
After findByIdAfter where id > ?
Before findByIdBefore where id < ?
IsNull findByNameIsNull where name is null
isNotNull,NotNull findByNameNotNull where name is not null
Like findByNameLike where name like ?
NotLike findByNameNotLike where name not like ?
StartingWith findByNameStartingWith where name like ‘?%’
EndingWith findByNameEndingWith where name like ‘%?’
Containing findByNameContaining where name like ‘%?%’
OrderBy findByIdOrderByXDesc where id=? order by x desc
Not findByNameNot where name <> ?
In findByIdIn(Collection c) where id in (?)
NotIn findByIdNotIn(Collection c) where id not in (?)
True findByAaaTrue where aaa = true
False findByAaaFalse where aaa = false
IgnoreCase findByAaaTue where UPPER(name)=UPPER(?)
top findTop10 top 10/where ROWNUM <=10

使用方法

使用时自定义接口继承JpaRepository,传入泛型,第一个参数为要操作的实体类,第二个参数为该实体类的主键类型

public interface SpuRepository extends JpaRepository {
    Spu findOneById(Long id);
    Page findByCategoryIdOrderByCreateTimeDesc(Long cid, Pageable pageable);
    Page findByRootCategoryIdOrderByCreateTime(Long cid, Pageable pageable);
}
  • 1
  • 2
  • 3
  • 4
  • 5

你可能感兴趣的:(java,spring,数据库)