最近项目中用到了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 模糊查询 分页查询的更多相关文章

  1. Spring Data JPA中的动态查询 时间日期

    功能:Spring Data JPA中的动态查询 实现日期查询 页面对应的dto类private String modifiedDate; //实体类 @LastModifiedDate protec ...

  2. Spring Boot JPA的查询语句

    文章目录 准备工作 Containing, Contains, IsContaining 和 Like StartsWith EndsWith 大小写不敏感 Not @Query Spring Boo ...

  3. Spring Data JPA 的 Specifications动态查询

    主要的结构: 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询. ...

  4. Spring Boot(五):Spring Boot Jpa 的使用

    在上篇文章Spring Boot(二):Web 综合开发中简单介绍了一下 Spring Boot Jpa 的基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项. ...

  5. Spring Boot Jpa 的使用

    Spring Boot Jpa 介绍 首先了解 Jpa 是什么? Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范.它为 Java 开发人员提供了一种 ...

  6. (转)Spring Boot(五):Spring Boot Jpa 的使用

    http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...

  7. Spring Boot Jpa 表名小写转大写

    今天在使用SpringBoot整合Hibernate后创建表,表名为小写,而在linux下,mysql的表名是区分大小写的,因此在我的数据表中,就出现了两个一样的表 act_id_user 和  AC ...

  8. Spring Boot JPA 中transaction的使用

    文章目录 @Transactional的实现 @Transactional的使用 Transaction的传播级别 REQUIRED SUPPORTS MANDATORY NEVER NOT_SUPP ...

  9. Spring Boot JPA 连接数据库

    本文将介绍怎样在Spring Boot project中加入JPA作为持久化方式. 改动 pom.xml 依赖 与上一篇介绍的 jdbc 不同的是 spring-boot-starter-jdbc 改 ...

  10. Spring boot Jpa添加对象字段使用数据库默认值

    Spring boot Jpa添加对象字段使用数据库默认值 jpa做持久层框架,项目中数据库字段有默认值和非空约束,这样在保存对象是必须保存一个完整的对象,但在开发中我们往往只是先保存部分特殊的字段其 ...

随机推荐

  1. LED Decorative Light Manufacturer - Led Wall Lamp Performance Characteristics

    LED Decorative Light Manufacturer    introduction: LED wall lamp is a light-emitting diode as a ligh ...

  2. 【C语言】输入三个正整数a,b,c,求最大值,要求定义一个计算最大值的函数max(a,b),返回a,b的值

    #include<stdio.h> int max(int a, int b)/*定义函数*/ { if (a > b) return a; else return b; } int ...

  3. 关于static 关键字的总结

    转发自:https://www.cnblogs.com/xrq730/p/4820992.html 前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本 ...

  4. react+ant design Breadcrumb面包屑组件

    import React from 'react'; import { Link }from 'react-router-dom'; import { Breadcrumb } from 'antd' ...

  5. 解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题

    npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

  6. python测量代码运行时间方法

    Python 社区有句俗语: “python自己带着电池” ,别自己写计时框架. Python3.2具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间. timeit 模块: ...

  7. 排查 k8s 集群 master 节点无法正常工作的问题

    搭建的是 k8s 高可用集群,用了 3 台 master 节点,2 台 master 节点宕机后,仅剩的 1 台无法正常工作. 运行 kubectl get nodes 命令出现下面的错误 The c ...

  8. Codeforces Round #599 (Div. 2) C. Tile Painting

    Ujan has been lazy lately, but now has decided to bring his yard to good shape. First, he decided to ...

  9. ELK节点安装

    ELK 安装参考链接 https://www.cnblogs.com/xialiaoliao0911/p/9599898.html setenforce 0sed -i s/enforcing/dis ...

  10. power-plan如何定

    Power-Plan或者说PG如何打,这是一个仁者见仁智者见智的问题,没有一个标准的答案,因为有各种各样的影响因素.本文将列举一些可能的影响因素: 1.和design  相关 1) Utilizati ...