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. quartz报错 org.quartz.impl.StdSchedulerFactory.

    quartz任务执行报错 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFa ...

  2. HDU 3642 求体积交集

    Get The Treasury 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3642 Problem Description Jack knows ...

  3. shell习题第14题:

    [题目要求] 需求,根据web服务器的访问日志,把一些请求高的ip给拒绝掉,并且每隔半小时把不再发起请求或者请求量很小的ip给解封 假设: 1. 一分钟内请求量高于100次的ip视为不正常的请求 2. ...

  4. golang随机数及pipe

    var pipe1 = make(chan int, 1000) func piTest(){ for{ data := <- pipe1 fmt.Printf("get data:% ...

  5. react的状态管理

    近两年前端技术的发展如火如荼,大量的前端项目都在使用或转向 Vue 和 React 的阵营, 由前端渲染页面的单页应用占比也越来越高,这就代表前端工作的复杂度也在直线上升,前端页面上展示的信息越来越多 ...

  6. Antd组件库,利用Menu组件模拟一个简单Tree组件

    当前工作中,前端的主要技术栈用是vue. 那React怎么办呢?总不至于把他扔在墙角吧! 只能在一些很小的项目上,也只有自己一个前端的时候,悄悄的上React. 当然,React项目UI组件还是最喜欢 ...

  7. Myatis中的OGNL和bind标签的结合用法

    1.MyBatis常用的OGNL e1 or e2 e1 and e2 e1 == e2,e1 eq e2 e1 != e2,e1 neq e2 e1 lt e2:小于 e1 lte e2:小于等于, ...

  8. js面向对象的几种方式

    对象的字面量 var obj={}:创建实例对象 var obj=new Object();构造函数模式 function fn(){}, new fn();工厂模式:用一个函数,通过传递参数返回对象 ...

  9. vsCode设置代码片段

    输入vue.json { "Print to console": { "prefix": "vv", "body": [ ...

  10. 二、MySQL介绍

    目录 一.MySQL背景 二.MySQL的优点 三.MySQL安装 四.MySQL服务的启动和停止 五.MySQL登录和退出 六.MySQL常用命令 (一)常用命令 (二)语法规范 (三)SQL语言细 ...