1.继承接口

2.下面是简单的操作---自己写过的,下次再整理一下

    public Page<IdddsMember> list(MemberSearch search, Pageable pageable) {
Page<IdddsMember> page = memberRepository.findAll((root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
//groupId
if (StringUtils.isNotEmpty(search.getSearchGroupId())) {
predicates.add((cb.equal(root.get("idddsMemberGroup").get("id"), search.getSearchGroupId())));
} else {
CriteriaBuilder.In<String> in = cb.in(root.get("idddsMemberGroup").get("id"));
List<String> groupIdList = memberGroupRepository.findIdsByStatus(StatusEnum.normal.getDesc());
for (String str : groupIdList) {
in.value(str);
}
predicates.add(in);
}
//role角色
if (StringUtils.isNoneBlank(search.getSearchRole())) {
predicates.add((cb.equal(root.get("role"), search.getSearchRole())));
}
//status状态
if (StringUtils.isNoneBlank(search.getSearchStatus())) {
predicates.add((cb.equal(root.get("status"), search.getSearchStatus())));
}
//名字,公司模糊查询
if (StringUtils.isNoneBlank(search.getSearchName())) {
predicates.add((cb.like(root.get("trueName"), "%" + search.getSearchName() + "%")));
}
if (StringUtils.isNoneBlank(search.getSearchOrganization())) {
predicates.add((cb.like(root.get("organization"), "%" + search.getSearchOrganization() + "%")));
}
//时间,这里是个坑,数据库字段为created_time
if (search.getStart() != null) {
predicates.add(cb.greaterThanOrEqualTo(root.get("createdTime"), DateUtils
.parseDate(DateUtils.formatDate(search.getStart(), "yyyy-MM-dd") + " 00:00:00")));
}
if (search.getEnd() != null) {
predicates.add(cb.lessThanOrEqualTo(root.get("createdTime"), DateUtils
.parseDate(DateUtils.formatDate(search.getEnd(), "yyyy-MM-dd") + " 23:59:59")));
}
query.where(predicates.toArray(new Predicate[]{}));
//排序
if (StringUtils.isNoneBlank(search.getOrderBy())) {
if ("desc".equals(search.getSortType())) {
//倒序
query.orderBy(cb.desc(root.get(search.getOrderBy())));
} else {
//正序
query.orderBy(cb.asc(root.get(search.getOrderBy())));
}
}
return null;
}, pageable);
return page;
}

关于JPA动态SQL查询的更多相关文章

  1. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  2. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

    前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...

  3. ibatis 中动态SQL查询和动态标签嵌套的使用

    ibatis 动态查询对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解 ...

  4. 一步步学Mybatis-怎么样实现动态SQL查询(6)

    上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 S ...

  5. 获取动态SQL查询语句返回值(sp_executesql)

    在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值 ...

  6. 一个jpa动态模糊查询的实现

    最近一直在是用spring data jpa,使用起来确实方便,如果是单表的操作基本上通过方法名都可以实现,下面是一个 Specification 实现动态模糊查询的例子这个查询是通过JpaSpeci ...

  7. SQL Server 2012 - 动态SQL查询

    动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...

  8. Mybatis中多个参数的问题&&动态SQL&&查询结果与类的对应

    ### 1. 抽象方法中多个参数的问题 在使用MyBatis时,接口中的抽象方法只允许有1个参数,如果有多个参数,例如: Integer updatePassword( Integer id, Str ...

  9. mybatis 动态SQL查询总结

    背景 ××项目需要提供系统部分函数第三方调用接口,基于安全性和避免暴露数据库表信息的基础上进行函数接口的设计,根据第三方调用身份的权限提供某张表的自定义集合.本项目基于mybatis的持久层框架,支持 ...

随机推荐

  1. 关于MD5加盐使用

    md5 是一种数据加密,例子是对123456 进行了两次加盐 第一次是 inputPassToFormPass   salt是固定的 1a2b3c4d 第二次是  formPassToDBPass s ...

  2. Scala 孤立对象和单例对象方法体的用法和例子

    [学习笔记] 1  以object关键字修饰一个类名,这种语法叫做孤立对象,这个对象是单例的. 相当于将单例类和单例对象同时定义.相当于java中的单例,即在内存中只会存在一个Test3实例.创建一个 ...

  3. POJ1631_高深DP

    按照那个图形研究比较了一会, 居然发现是最长上升子序列问题, 这个是真的牛逼!! 只不过是题目没有说的那么直白!

  4. QT QcustomPlot的使用(二)

    在QcustomPlot中,给横纵坐标添加箭头的方法 //在末尾添加箭头 customPlot->xAxis->setUpperEnding(QCPLineEnding::esSpikeA ...

  5. Go语言操作NoSql

    NSQ平台 NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ. NSQ NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异. N ...

  6. 第9章:Python自动化管理

    1.使用SSH协议访问远程服务器 SSH协议 OpenSSH协议 使用密钥登陆远程服务器 使用ssh-agent管理私钥 2.使用Polysh批量管理服务器 Polysh requires pytho ...

  7. easyui-combobox多选时的小问题

    easyui-combobox可支持多选,仅需将multiple值设为true即可 $('#combobox').combobox({ url:url, multiple:true, separato ...

  8. 第一章、web应用安全概论--web应用系统介绍--TCP/IP协议

    TCP/IP协议源于1969年,是国际互联网Internet采用的协议标准TCP/IP协议是一组通信协议的代名词,是由一系列协议组成的协议族,本身是指两个协议集:    TCP--传输控制协议    ...

  9. 怎样获取当前文档所有的元素节点(即html标签节点)

    方法1. 使用 document.getElementsByTagName("*"); 方法2. 使用document.querySelectorAll("*" ...

  10. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by de

    MySQL在高版本需要指明是否进行SSL连接 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding ...