目录
1.数据库交互层继承父类
public interface TablenameRepository extends JpaRepository<tableName, String>,JpaSpecificationExecutor<tableName> {
2.实现层处理
1.查询、模糊、in、排序
Specification<TableName> special = new Specification<TableName>{
@Override
public Predicate toPredicate(Root<TblCarton2RCardLog> root, CriteriaQuery<?> query,CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
//增加查询条件
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 + "%"));//like
//between and
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));
//in
list.add(root.get("id").get("lotNo").as(String.class).in(lotNos));
//排序ORDER BY packdate DESC,packtime DESC
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();
}
};
List<TableName> tableList = TablenameRepository.finndAll(special);
2.jpa and和orc参考实现
and条件主要是直接add就行
关键是or,需要新建一个List<Predicate> ,两者之间用or进行关联
@Override
public Page<TestModule> findVenueList(Pageable pageable,String name,String [] hobbies,Integer age, String brirth) {
Specification<TestModule> specification=new Specification<TestModule>() {
@Override
public Predicate toPredicate(Root<TestModule> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> listAnd=new ArrayList<>(); //组装and语句
if(!StringUtils.isBlank(name)) {
listAnd.add(criteriaBuilder.like(root.get("name"), "%" + name)); //姓名 模糊查询
}
if(age!=null) {
listAnd.add(criteriaBuilder.equal(root.get("age"), age)); //年龄
}
if(!StringUtils.isBlank(brirth)) {
listAnd.add(criteriaBuilder.like(root.get("brirth"), "%" + brirth + "%")); //出生地 模糊查询
}
Predicate predicateAnd = criteriaBuilder.and(listAnd.toArray(new Predicate[listAnd.size()])); //AND查询加入查询条件
List<Predicate> listOr = new ArrayList<>();///组装or语句
if(hobbies!=null && hobbies.length>0) {
for (String hoobbie : hobbies) {
//爱好多选 用OR链接
listOr.add(criteriaBuilder.equal(root.get("hobbie"), hoobbie));
}
}
Predicate predicateOR = criteriaBuilder.or(listOr.toArray(new Predicate[listOr.size()])); //OR查询加入查询条件
return criteriaQuery.where(predicateAnd,predicateOR).getRestriction();
}
};
Page<TestModule> page=testModuleRepository.findAll(specification,pageable);
return page;
}