Spring Data JPA
Spring Data是Spring提供的操作数据的框架,Spring Data JPA是Spring Data的一个模块,通过Spring data 基于jpa标准操作数据的模块。
Spring Data的核心能力,就是基于JPA操作数据,并且可以简化操作持久层的代码。
它使用一个叫作Repository的接口类为基础,它被定义为访问底层数据模型的超级接口。而对于某种具体的数据访问操作,则在其子接口中定义。
Spring Data可以让我们只定义接口,只要遵循spring data的规范,就无需写实现类,不用写sql语句直接查询数据
Repository
-
Repository
提供了findBy + 属性 方法
-
CrudRepository
继承了Repository 提供了对数据的增删改查 -
PagingAndSortRepository
继承了CrudRepository 提供了对数据的分页和排序,缺点是只能对所有的数据进行分页或者排序,不能做条件判断
-
JpaRepository
继承了PagingAndSortRepository
开发中经常使用的接口,主要继承了PagingAndSortRepository,对返回值类型做了适配 -
JpaSpecificationExecutor
提供多条件查询
CrudRepository
CrudRepository继承Repository,添加了一组对数据的增删改查的方法
PagingAndSortingRepository
PagingAndSortingRepository继承CrudRepository,添加了一组分页排序相关的方法
JpaRepository
JpaRepository继承PagingAndSortingRepository,添加了一组JPA规范相关的方法。对继承父接口中方法的返回值进行了适配,因为在父类接口中通常都返回迭代器,需要我们自己进行强制类型转化。而在JpaRepository中,直接返回了List。
开发中最常用JpaRepository
JpaSpecificationExecutor
这个接口比较特殊,单独存在,没有继承以上接口。主要提供了多条件查询的支持,并且可以在查询中添加分页和排序。因为这个接口单独存在,因此需要配合以上说的接口使用。
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, Long> {
Spu findOneById(Long id);
Page<Spu> findByCategoryIdOrderByCreateTimeDesc(Long cid, Pageable pageable);
Page<Spu> findByRootCategoryIdOrderByCreateTime(Long cid, Pageable pageable);
}
- 1
- 2
- 3
- 4
- 5