友情链接:Spring Data Jpa的动态查询库 https://github.com/wenhao/jpa-spec
功能介绍
兼容Spring Data Jpa 和JPA2.1接口。
Equal/NotEqual/Like/NotLike/In/NotIn支持可变参数, Equal/NotEqual 支持空(Null)值。
每个条件支持关联查询。
支持自定义条件查询。
条件构建器。
支持分页和排序。
导包:
com.github.wenhao
jpa-spec
3.1.1
*
*
详细的使用文档:
思路分析:
1 用户传的数据有0-n个
2 所以要准备一个对象接收用户传过来的数据==》Query对象
3 分页的条件对我们来说也是封装到Query对象中的
Query对象(抽个父类):
public abstract classBaseQuery {private int currentPage=1;private int currentSize=10;private boolean sort = true;privateString sortByColumn;//写成抽象类,子类必须实现
public abstractSpecification getSpecification();//分页加排序
publicPageable getPageable(){
Pageable pageRequest=newPageRequest(currentPage, currentSize);if (sortByColumn!=null&&!"".equals(sortByColumn)){if(sort){
Sort sort= newSort(Sort.Direction.ASC,sortByColumn);
pageRequest= newPageRequest(currentPage, currentSize,sort);returnpageRequest;
}
Sort sort= newSort(Sort.Direction.DESC,sortByColumn);
pageRequest= newPageRequest(currentPage, currentSize,sort);returnpageRequest;
}returnpageRequest;
}//拿到排序
publicSort getSort(){if (sortByColumn!=null&&!"".equals(sortByColumn)){if(sort){
Sort sort= newSort(Sort.Direction.ASC,sortByColumn);returnsort;
}
Sort sort= newSort(Sort.Direction.DESC,sortByColumn);returnsort;
}return null;
}
提供相应的getter,setter
}
具体的query对象(以员工查询为例):
public class EmployeeQuery extendsBaseQuery{privateString username;privateString email;privateInteger age;privateLong departmentId;
@OverridepublicSpecification getSpecification() {
Specification spec = Specifications.and()
.like(StringUtils.isNotBlank(username),"username", "%"+username+"%")
.like(StringUtils.isNotBlank(email),"email", "%"+email+"%")
.ge(age!=null,"age",age)
.eq(departmentId!=null,"departmentId.id",departmentId)
.build();returnspec;
}
getter,setter
}