SpringDataJpa使用——自定义条件查询和分页查询接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SpringDataJpa使⽤——⾃定义条件查询和分页查询接⼝
背景
开发中,需要使⽤Spring JPA作为业务持久层操作,⼤家都知道,只要使⽤⼀个接⼝继承Jpa的相关接⼝就可以实现数据持久化操作,现在需要继承⼀个接⼝,具有多条件及分页查询的⽅法。

软件环境
Java 1.8
Spring Boot 2.2.1.RELEASE
Spring Data Jpa 2.2.1.RELEASE
思路
写⼀个公共的基础接⼝,继承JPA的相关接⼝
这个接⼝继承接⼝JpaRepository<T, ID>和JpaSpecificationExecutor<T>
JpaRepository<T, ID>接⼝具有基本的数据CURD操作、分页查询以及条件查询⽅法,缺少具有分页和条件同时查询的⽅法
JpaSpecificationExecutor<T>具有分页和条件同时查询的⽅法:Page<T> findAll(@Nullable Specification<T> var1, Pageable
var2);
实例
实体类
package com.canaan.minemanage.entities.mysql.statistic;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "receiver_miner_record")
public class ReceiverMinerRecord implements Serializable {
private static final long serialVersionUID = 1L;
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "serialno", columnDefinition = "BIGINT COMMENT '流⽔号'")
@Id
private Integer serialno;
@Column(name = "global_code", columnDefinition = "varchar(36) NOT NULL COMMENT '全局流⽔号'")
private String globalCode;
@Column(name = "farm_code", columnDefinition = "varchar(36) NOT NULL COMMENT '场地编号'")
private String farmCode;
@Column(name = "dna", columnDefinition = "varchar(36) COMMENT 'dna编号'")
private String dna;
@Column(name = "sn", columnDefinition = "varchar(36) COMMENT 'sn编号'")
private String sn;
public String getGlobalCode() {
return globalCode;
}
public void setGlobalCode(String globalCode) {
this.globalCode = globalCode;
}
public Integer getOffMark() {
return offMark;
}
public void setOffMark(Integer offMark) {
this.offMark = offMark;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getSerialno() {
return serialno;
}
public void setSerialno(Integer serialno) {
this.serialno = serialno;
}
public String getFarmCode() {
return farmCode;
public void setFarmCode(String farmCode) {
this.farmCode = farmCode;
}
public String getDna() {
return dna;
}
public void setDna(String dna) {
this.dna = dna;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
@Override
public String toString() {
return "ReceiverMiner{" +
"serialno='" + serialno + '\'' +
", farmCode='" + farmCode + '\'' +
", dna='" + dna + '\'' +
", sn='" + sn + '\''
'}';
}
}
JPA
基础接⼝
@NoRepositoryBean
public interface BaseRepository<T> extends JpaRepository<T, Long>, JpaSpecificationExecutor<T> {
}
接⼝实现
@Repository
public interface ReceiverMinerRecordResp extends BaseRepository<ReceiverMinerRecord> {
}
业务实现
public RetResult findListExtend(MillListCondition millListCondition) {
String farmCode = millListCondition.getFarmCode();
List<String> dnaNames = millListCondition.getDnaNames();
Integer pageIndex = millListCondition.getPageIndex();
Integer pageSize = millListCondition.getPageSize();
//条件查询
Specification<ReceiverMinerRecord> specification = new Specification<ReceiverMinerRecord>() {
@SneakyThrows
@Override
public Predicate toPredicate(Root<ReceiverMinerRecord> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { List<Predicate> predicateList = new ArrayList<>();
//farmCode
if (StrUtil.isNotEmpty(farmCode)) {
predicateList.add(criteriaBuilder.equal(root.get("farmCode"), farmCode));
}
//dna
if (CollectionUtils.isNotEmpty(dnaNames)) {
Predicate dnaPredicate = root.get("dna").in(dnaNames);
predicateList.add(dnaPredicate);
}
Predicate[] pre = new Predicate[predicateList.size()];
pre = predicateList.toArray(pre);
return criteriaQuery.where(pre).getRestriction();
}
};
//分页
Pageable pageable = null;
if (pageIndex != 0) {
pageable = PageRequest.of(pageIndex - 1, pageSize, Sort.Direction.DESC, "minerIp");
//查询
Page<ReceiverMinerRecord> receiverMinerRecordPage = receiverMinerRecordResp.findAll(specification, pageable); pageTotal = receiverMinerRecordPage.getTotalElements();
List<ReceiverMinerRecord> receiverMinerRecords = receiverMinerRecordPage.getContent();
return ResultUtil.success(200, receiverMinerRecords, "查询列表成功", pageTotal);
}。

相关文档
最新文档