JPA动态查询--Spring Data Specification

</br>
例子使用Teacher类

Teacher{
String name;
String address;
String email;
}

1.使用MetaModel generator生成相应类的metaModelclass,工具有很多,可以使用maven,eclipse插件也行。得到Teacher_
2.新建一个继承Specification接口的类,重写toPredicate方法例如要根据Teacher name,address,email查询相应的教师信息。

public class TeacherSpec implements Specification {
private final Teacher teacher;
publicTeacherSpec(TeacherSpec teacher){
this.teacher= teacher;
}

@Override
public Predicate toPredicate(Root root, CriteriaQuery query,CriteriaBuilder cb) {
List=new ArrayList();
if(StringUtils.isNotBlank(teacher.getName())){
predicates.add(cb.equal(root.get(Teacher_.name),teacher.getName()));
}
if(StringUtils.isNotBlank(teacher.getAddress)){
predicates.add(cb.like(root.get(Teacher_.address),teacher.getAddress()+"%"));
}
if(StringUtil.isNotBlank(teacher.getEmail())){
predicates.add(cb.like(root.get(Teacher_.email),teacher.getEmail()+"%"));
}
returnandTogether(predicates,cb);
}

private PredicateandTogether(List predicates, CriteriaBuilder cb) {
return cb.and(predicates.toArray(newPredicate[0]));
}
}

3.Dao接口继承JpaRepository,JpaSpecificationExecutor

TeacherDao entends JpaRepository<Teacher,Integer>, JpaSpecificationExecutor<Teacher>**

4.Service方法中获得一个查询标准类TeacherSpec的对象,teacherSpc然后调用dao方法就好了

Page<teaPage>=teacherDao.findAll(teacherSpc,newPageRequest(pageNo,pageSize))**
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,917评论 18 399
  • 本文参考了Spring Data JPA官方文档,引用了部分文档的代码。 Spring Data JPA是Spri...
    乐百川阅读 26,014评论 3 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,359评论 19 139
  • 酸辣土豆片 食材:新土豆、青红椒、干红椒、蒜、盐、糖、味精、生抽、醋 做法: 1、土豆削皮洗净切成片。青红椒洗净切...
    msmk121阅读 1,176评论 0 0