目次
1. データベース対話層は親クラスを継承します
public interface TablenameRepository extends JpaRepository<tableName, String>,JpaSpecificationExecutor<tableName> {
2. レイヤー処理を実装する
1. クエリ、ファジー、イン、ソート
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 と orc のリファレンス実装
and 条件は主に直接追加します。
キーは or です。新しい List<Predicate> を作成し、 or を使用して 2 つを関連付ける必要があります。
@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;
}