关于JPA动态SQL查询
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查询的更多相关文章
- SQL Server-聚焦深入理解动态SQL查询(三十二)
前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...
- SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?
前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...
- ibatis 中动态SQL查询和动态标签嵌套的使用
ibatis 动态查询对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解 ...
- 一步步学Mybatis-怎么样实现动态SQL查询(6)
上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 S ...
- 获取动态SQL查询语句返回值(sp_executesql)
在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值 ...
- 一个jpa动态模糊查询的实现
最近一直在是用spring data jpa,使用起来确实方便,如果是单表的操作基本上通过方法名都可以实现,下面是一个 Specification 实现动态模糊查询的例子这个查询是通过JpaSpeci ...
- SQL Server 2012 - 动态SQL查询
动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...
- Mybatis中多个参数的问题&&动态SQL&&查询结果与类的对应
### 1. 抽象方法中多个参数的问题 在使用MyBatis时,接口中的抽象方法只允许有1个参数,如果有多个参数,例如: Integer updatePassword( Integer id, Str ...
- mybatis 动态SQL查询总结
背景 ××项目需要提供系统部分函数第三方调用接口,基于安全性和避免暴露数据库表信息的基础上进行函数接口的设计,根据第三方调用身份的权限提供某张表的自定义集合.本项目基于mybatis的持久层框架,支持 ...
随机推荐
- Windows32位或64位下载安装配置Scala
[学习笔记] Windows 32位或64位下载安装配置Scala: 1)下载地址:http://www.scala-lang.org/download/,看我的spark那节,要求scala是2.1 ...
- multipart/form-data(二进制流) 两种传输方式
一.传统表单提交传输方式 <form id= "uploadForm" action= "url" method= "post" en ...
- Python 第一节随堂练习
作业: 1 从键盘输入一个整数,判断该数字能否被2和3同时整除,能否被2整除,能否被3整除,不能被2和3整除,输出相应信息 1 my_num = int(input('请输入一个整数')) 2 if ...
- pthread_cancel 相关
假设线程A对线程B发出了一个取消请求.通过如下函数: #include <pthread.h> int pthread_cancel(pthread_t thread); 参数: thre ...
- MySQL_Utilities工具
需求 Python 2.6 MySQL Connector/Python 连接器 下载地址: http://dev.mysql.com/downloads/utilities/ ...
- oracle多表关联删除的两种方法
oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...
- python+django学习三
在这个网站看https://sshwsfc.github.io/xadmin/ xadmin结果一堆的坑,文档找不到界面,dome登陆就报错permission denied for rela ...
- Qt之QTableWidget
学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研究人一样一样的),因为QTableWidget继承于类QTableView. 两者主要区别是QTableV ...
- spring利用xml配置定时任务
在开发中会经常遇到做定时任务的需求,例如日志定时清理与处理,数据信息定时同步等需求. 1.在spring中利用xml配置定时任务,如下 <!-- ftpiptv信息同步接口定时任务配置--> ...
- selenium 12306模拟登陆
代码应用场景 :基于第三方打码网站模拟登陆12306 验证码识别 基于第三方平台超级鹰识别 超级鹰官网:http://www.chaojiying.com/user/ 超级鹰使用流程: 注册 登陆(用 ...