spring-data-jpa封装 Specification 动态条件查询

Zuji-JPA官方文档地址

Spring 项目集成

如果你是 Spring 项目,请直接集成zuji-jpa依赖,spring boot和spring mvc项目均支持。

gradle

implementation 'top.spring-data-jpa:zuji-jpa:1.0.1'

maven

<dependency>
  <groupId>top.spring-data-jpagroupId>
  <artifactId>zuji-jpaartifactId>
  <version>1.0.1version>
dependency>

使用示例

spring data jpa使用演示
类似于mybatis-plus的条件构造器
动态条件查询 + or 嵌套条件+ 排序+ 分页

public Page<User> list(ReqUserListVO params) {
   Specification<User> spec = Specifications.where(e -> {
       if (!params.getUserType().equals(UserType.ALL)) {
           e.eq("userType", params.getUserType());
       }
       if (params.getUserName() != null) {
           e.contains("userName", params.getUserName());
       }
       if (params.getRange() != null) {
           e.eq("assigneeId", AuthHelper.currentUserId());
       }
       e.or(e2 -> {
           e2.eq("status", "1");
           e2.eq("status", "2");
       });
       e.eq("deleted", 0);
   });
   Sort sort = Sort.by("createTime").descending();
   return repository.findAll(spec, params.pageRequest(sort));
}

如果没有条件判断也可以写成这样,链式编程

public Page<Users> list(ReqUserListDTO params) {
   Specification<User> spec = Specifications.where(e -> {
       e.eq("userType", params.getUserType())
        .contains("userName", params.getUserName())
        .eq("assigneeId", AuthHelper.currentUserId())
        .or(e2 -> e2.eq("status", "1").eq("status", "2"))
        .eq("deleted", 0);
   });
   Sort sort = Sort.by("createTime").descending();
   return repository.findAll(spec, params.pageRequest(sort));
}

等同于sql

SELECT
	* 
FROM
	user
WHERE
	user_type = 'ADMIN' 
	AND user_name like "%admin%" 
	AND assignee_id = 11 
	AND ( status = 1 OR status = 2 ) 
	AND deleted = 0 
ORDER BY
	create_time DESC 
	LIMIT 0,10

基于spring data jap Specification 查询封装,封装精简 灵活 ,扩展性非常强。

如果有任何问题或想要更多交流,请加QQ群 758629787。

你可能感兴趣的:(jpa)