Jpa自定义条件分页查询

本文介绍了JPA中进行自定义条件分页查询的三种方法:方案1通过继承JpaSpecificationExecutor并手动编写SQL,适用于复杂查询但需处理多变参数;方案2利用Example接口,操作简单但不支持某些复杂条件;方案3更为灵活,能应对多种查询需求,但可能需多次查询以获取完整信息。
摘要由CSDN通过智能技术生成

Jpa自定义条件分页查询

Jpa 分页查询有三种方法

  1. 新建继承 JpaRepository 的接口,并定义返回 Page<T> 的方法
  2. <S extends T> Page<S> findAll(Example<S> var1, Pageable var2);
  3. Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
方案1

新建继承 JpaRepository 的接口,并定义返回 Page<T> 的方法
定义好方法后,直接调用即可,这种方法的优势就是可以自定义sql,当涉及连表操作时这种做法省事很多,但缺点也是需要自己编写sql,而且在实际情况中param的个数是不确定的,要么在SQL中判断param是否为空,要么定义多个分页查询方法,这另种做法都不太优雅

public interface MyRepository extends JpaRepository<YourEntity, Long>, JpaSpecificationExecutor<YourEntity> {
   
	@Query("select .... from ... where ... param1=:param1 and pram2=:param2")
    Page<T> find(String param1, String param2...., Pageable pageable)
}

方案2

<S extends T> Page<S> findAll(Example<S> var1, Pageable var2);
这种方法可以根据自己的意愿够着example,使用方法比较简单,缺点是无法满足比较大小类的查询,比如大于小于操作和in操作

repository.findAll(Example.of(example),pageable);
方案3

Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
这种方法比较万能,可以应对各种条件,代码编写量比较多,当依赖其他表的数据时需要分开查询,不能一步到位

        Page<Alarm> alarms = alarmRepository.findAll((Specification<Alarm>) (root, query, cb) -> {
   
            List
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值