JPA Specification常用查询+排序实例
https://www.jb51.net/article/229599.htm#_label1
目录
- JPA Specification常用查询+排序
- JPA Specification复杂查询+排序
?
1 | public interface TblCarton2RCardLogRepository extends JpaRepository,JpaSpecificationExecutor { |
?
1234567891011121314151617 | tblCarton2RCardLogRepository.findAll( new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery<?> query,CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get( "cartonNo" ).as(String. class ), cartonNo)); list.add(cb.equal(root.get( "id" ).get( "rCard" ).as(String. class ), rCard)); list.add(cb.like(root.get( "mocode" ).as(String. class ), "%" + mocode + "%" )); list.add(cb.between(root.get( "frozenDate" ).as(Long. class ), frozenDateStart, frozenDateEnd)); list.add(cb.greaterThanOrEqualTo(root.get( "id" ).get( "rcard" ).as(String. class ), rCardStart)); list.add(root.get( "id" ).get( "lotNo" ).as(String. class ).in(lotNos)); Predicate[] p = new Predicate[list.size()]; query.where(cb.and(list.toArray(p))); query.orderBy(cb.desc(root.get( "packDate" )),cb.desc(root.get( "packTime" ))); return query.getRestriction(); } }); |
?
123456789 | @Data public class DeptSort { private String id; private String name; private String highDeptName; private String principal; private String deptType; private String enable; } |
?
1234567891011121314151617181920212223242526272829303132333435363738 | public ResponseModel table( @RequestParam ( "search" )String search, @RequestParam ( "pageNumber" )Integer pageNumber, @RequestParam ( "pageSize" )Integer pageSize, @RequestBody DeptSort deptSort){ ResponseModel model = null ; try { List orders = new ArrayList(); if (StringUtils.isNotBlank(deptSort.getId())){ orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getId()), "id" )); } if (StringUtils.isNotBlank(deptSort.getName())){ orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getName()), "name" )); } if (StringUtils.isNotBlank(deptSort.getHighDeptName())){ orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getHighDeptName()), "highDeptName" )); } if (StringUtils.isNotBlank(deptSort.getPrincipal())){ orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getPrincipal()), "principal" )); } if (StringUtils.isNotBlank(deptSort.getDeptType())){ orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getDeptType()), "deptType" )); } if (StringUtils.isNotBlank(deptSort.getEnable())){ orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getEnable()), "enable" )); } orders.add( new Sort.Order(Sort.Direction.ASC, "id" )); } Sort sort = new Sort(orders); Pageable pageable = new PageRequest(pageNumber,pageSize,sort); Page all = service.findAll(search, pageable); model = ResponseModel.getSuccessResponseModel().setData(all); } catch (Exception e){ e.printStackTrace(); model = ResponseModel.getFailedResponseModel(); } return model; } |
?
1 | List orders = new ArrayList(); |
?
1 | orders.add( new Sort.Order(Sort.Direction.fromString(deptSort.getEnable()), "enable" )) |
?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | Hibernate: /* select count (generatedAlias0) from Businessdept as generatedAlias0 where ( generatedAlias0. name like :param0 ) and ( generatedAlias0.deleteIs=1 ) */ select count (businessde0_.id) as col_0_0_ from t_department businessde0_ where ( businessde0_. name like ? ) and businessde0_.delete_is=1 Hibernate: /* select generatedAlias0 from Businessdept as generatedAlias0 where ( generatedAlias0. name like :param0 ) and ( generatedAlias0.deleteIs=1 ) order by generatedAlias0.deptType asc , generatedAlias0.enable desc */ select businessde0_.id as id1_3_, businessde0_.delete_is as delete_i2_3_, businessde0_.dept_type as dept_typ3_3_, businessde0_.enable as enable4_3_, businessde0_.high_dept_id as high_dep5_3_, businessde0_.high_dept_name as high_dep6_3_, businessde0_. name as name7_3_, businessde0_.principal as principa8_3_ from t_department businessde0_ where ( businessde0_. name like ? ) and businessde0_.delete_is=1 order by businessde0_.dept_type asc , businessde0_.enable desc limit ? |
可以看到条件查询,升序、降序都有。
结束语
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。