spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询
最近项目中用到了jpa,刚接触的时候有些激动,以前的到层忽然不用写sql不用去自己实现了,只是取个方法名就实现了,太惊艳了,惊为天人,但是慢慢的就发现不是这么回事了,在动态查询的时候,不知道怎么操作了,忽然感觉这个框架好笨重,在完成很多基础的操作提高效率的同时,
过度的封装也使他用起来不够灵活,整理了下动态查询以及and和or的查询,再次记录下,利己利人。 dao层只要定义一下findAll(Specification specification,PageRequest pageRequest);就可以用了,实现了动态查询,and 和or联合查询,分页查询,以及模糊查询,基本的需求都可以满足了,但是如果在复杂些,需要跨表甚至跨库的话,还是考虑下jdbc把,
不仅效率高也更灵活,加油!
@Override
public SispPage<AnnouncementEntity> findAnnouncementList(Integer pageNo, Integer pageSize, String t1, String t2,
String t3, String t4) {
Sort sort = new Sort(Sort.Direction.DESC, "createTime");
if (pageNo <= 1) {
pageNo = 0;
} else {
pageNo -= 1;
}
PageRequest pageRequest = PageRequest.of(pageNo, pageSize, sort);
Specification<A> specification = new Specification<A>() {
@Override
public Predicate toPredicate(Root<A> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder
criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
List<Predicate> predicateOr = new ArrayList<>();
Predicate conditionPre;
predicates.add(criteriaBuilder.equal(root.get("成员名称").as(String.class), 1));
if (StringUtils.isNotBlank(t1)) {
predicates.add(criteriaBuilder.like(root.get("成员名称").as(String.class), "%" + t1+ "%"));
} if (StringUtils.isNotBlank(t2)) {
predicates.add(criteriaBuilder.equal(root.get("成员名称").as(String.class), t2));
}
if (StringUtils.isNotBlank(t3)) {
predicates.add(criteriaBuilder.equal(root.get("成员名称").as(String.class), t3));
}
if (StringUtils.isNotBlank(t4)) {
predicateOr.add(criteriaBuilder.like(root.get("成员名称").as(String.class), "%" + t4+ "%"));
predicateOr.add(criteriaBuilder.like(root.get("成员名称").as(String.class), "%" + t4+ "%"));
conditionPre = criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new
Predicate[predicates.size()])),
criteriaBuilder.or(predicateOr.toArray(new
Predicate[predicateOr.size()]))).getRestriction();
} else {
conditionPre = criteriaBuilder.and(predicates.toArray(new
Predicate[predicates.size()]));
}
return conditionPre;
}
}; Page<C> c= announcementDao.findAll(specification, pageRequest);
List<C> cList= announcementPage.getContent(); return cList;
}
spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询的更多相关文章
- Spring Data JPA中的动态查询 时间日期
功能:Spring Data JPA中的动态查询 实现日期查询 页面对应的dto类private String modifiedDate; //实体类 @LastModifiedDate protec ...
- Spring Boot JPA的查询语句
文章目录 准备工作 Containing, Contains, IsContaining 和 Like StartsWith EndsWith 大小写不敏感 Not @Query Spring Boo ...
- Spring Data JPA 的 Specifications动态查询
主要的结构: 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询. ...
- Spring Boot(五):Spring Boot Jpa 的使用
在上篇文章Spring Boot(二):Web 综合开发中简单介绍了一下 Spring Boot Jpa 的基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项. ...
- Spring Boot Jpa 的使用
Spring Boot Jpa 介绍 首先了解 Jpa 是什么? Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范.它为 Java 开发人员提供了一种 ...
- (转)Spring Boot(五):Spring Boot Jpa 的使用
http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...
- Spring Boot Jpa 表名小写转大写
今天在使用SpringBoot整合Hibernate后创建表,表名为小写,而在linux下,mysql的表名是区分大小写的,因此在我的数据表中,就出现了两个一样的表 act_id_user 和 AC ...
- Spring Boot JPA 中transaction的使用
文章目录 @Transactional的实现 @Transactional的使用 Transaction的传播级别 REQUIRED SUPPORTS MANDATORY NEVER NOT_SUPP ...
- Spring Boot JPA 连接数据库
本文将介绍怎样在Spring Boot project中加入JPA作为持久化方式. 改动 pom.xml 依赖 与上一篇介绍的 jdbc 不同的是 spring-boot-starter-jdbc 改 ...
- Spring boot Jpa添加对象字段使用数据库默认值
Spring boot Jpa添加对象字段使用数据库默认值 jpa做持久层框架,项目中数据库字段有默认值和非空约束,这样在保存对象是必须保存一个完整的对象,但在开发中我们往往只是先保存部分特殊的字段其 ...
随机推荐
- data-dismiss="modal"
提交按钮不加: 加上则不会出现提示,直接关闭弹出框 <div class="modal fade" id="myModal" tabindex=" ...
- 【New】简•导航 正式上线
[New]简•导航 正式上线 一个简单的导航 链接:http://huangenet.gitee.io/simple/ 欢迎访问⊙ω⊙ 代码托管在码云,访问速度更快哦!
- 《你一生的故事》--------------science fiction-------------《巴比伦塔》
而塔就不一样了,不等你靠近去触摸它,就已经感到一种纯粹的坚固与力量.所有的传说都认为,建造这座塔的目的,是为了获得一种力量,这种力量是任何一座巴比伦庙塔都未曾拥有的.普通的巴比伦塔只是用太阳晒干的泥砖 ...
- mybatis报错:A query was run and no Result Maps were found for the Mapped Statement、、Property [login_ip] not found on type [com.thinkgem.jeesite.common.permission.entity.PremissUser]问题解决
今天在做ssm项目的时候出现了: 先是出现 了错误: mybatis报错:A query was run and no Result Maps were found for the Mapped St ...
- Adobe PS
1. ctrl + Tab 切换视图窗口 2.shift 拖拽图片,将 2 张图片放在一起 3.切换显示方式 /全屏/带有工具栏 快捷键:F 4. 缩小/放大工具 快捷键: alt + 鼠标滑轮 5 ...
- HDU 2586(LCA欧拉序和st表)
什么是欧拉序,可以去这个大佬的博客(https://www.cnblogs.com/stxy-ferryman/p/7741970.html)巨详细 因为欧拉序中的两点之间,就是两点遍历的过程,所以只 ...
- List 数据分批入库
直接贴代码,主要运用 List<E> subList(int fromIndex, int toIndex); 把 List 分割 /** * 保存批价结果 * * @param pric ...
- Hello 2020D(多重集)
如果有一对时间对在某一场馆有时间重合而这一对时间对在另一场馆没有时间重合,则输出NO,否则输出YES. #define HAVE_STRUCT_TIMESPEC #include<bits/st ...
- linux sftp 和scp 运用
Linux scp命令: Upload to remote :复制本地文件到远程 Part1: Scp -P port local_file remote_user@remote_ip:rem ...
- 统计字符在字符串中第n次出现的位置
输入一个字符串s,一个数字n和一个字符c,统计这个字符c在字符串s中第n次出现的位置 输入格式: 输入3行.第1行是字符串s,第2行是数字n,第3行是被查找的字符c. 输出格式: 第n个字符在字符串中 ...