zoukankan      html  css  js  c++  java
  • spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询

    最近项目中用到了jpa,刚接触的时候有些激动,以前的到层忽然不用写sql不用去自己实现了,只是取个方法名就实现了,太惊艳了,惊为天人,但是慢慢的就发现不是这么回事了,在动态查询的时候,不知道怎么操作了,忽然感觉这个框架好笨重,在完成很多基础的操作提高效率的同时,
    过度的封装也使他用起来不够灵活,整理了下动态查询以及and和or的查询,再次记录下,利己利人。

    dao层只要定义一下findAll(Specification specification,PageRequest pageRequest);就可以用了,实现了动态查询,and 和or联合查询,分页查询,以及模糊查询,基本的需求都可以满足了,但是如果在复杂些,需要跨表甚至跨库的话,还是考虑下jdbc把,
    不仅效率高也更灵活,加油!
     
     1 @Override
     2 public SispPage<AnnouncementEntity> findAnnouncementList(Integer pageNo, Integer pageSize, String t1, String t2,
       String t3, String t4) {
    3 Sort sort = new Sort(Sort.Direction.DESC, "createTime"); 4 if (pageNo <= 1) { 5 pageNo = 0; 6 } else { 7 pageNo -= 1; 8 } 9 PageRequest pageRequest = PageRequest.of(pageNo, pageSize, sort); 10 Specification<A> specification = new Specification<A>() { 11 @Override 12 public Predicate toPredicate(Root<A> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder
              criteriaBuilder) {
    13 List<Predicate> predicates = new ArrayList<>(); 14 List<Predicate> predicateOr = new ArrayList<>(); 15 Predicate conditionPre; 16 predicates.add(criteriaBuilder.equal(root.get("成员名称").as(String.class), 1)); 17 if (StringUtils.isNotBlank(t1)) { 18 predicates.add(criteriaBuilder.like(root.get("成员名称").as(String.class), "%" + t1+ "%")); 19 } 20 21 if (StringUtils.isNotBlank(t2)) { 22 predicates.add(criteriaBuilder.equal(root.get("成员名称").as(String.class), t2)); 23 } 24 if (StringUtils.isNotBlank(t3)) { 25 predicates.add(criteriaBuilder.equal(root.get("成员名称").as(String.class), t3)); 26 } 27 if (StringUtils.isNotBlank(t4)) { 28 predicateOr.add(criteriaBuilder.like(root.get("成员名称").as(String.class), "%" + t4+ "%")); 29 predicateOr.add(criteriaBuilder.like(root.get("成员名称").as(String.class), "%" + t4+ "%")); 30 conditionPre = criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new
                Predicate[predicates.size()])),
    31 criteriaBuilder.or(predicateOr.toArray(new
                Predicate[predicateOr.size()]))).getRestriction();
    32 } else { 33 conditionPre = criteriaBuilder.and(predicates.toArray(new
                Predicate[predicates.size()]));
    34 } 35 return conditionPre; 36 } 37 }; 38 39 Page<C> c= announcementDao.findAll(specification, pageRequest); 40 List<C> cList= announcementPage.getContent(); 41 42 43 return cList; 44 }
  • 相关阅读:
    Cisco产品采用的网络协议总结 java程序员
    实用级反主动防御rootkit设计思路 java程序员
    教你几招识别和防御Web网页木马 java程序员
    “TRUNK”的三个意思 不要混淆 java程序员
    Windows 图像捕获服务本地权限提升漏洞 java程序员
    入侵检测之蜜罐 java程序员
    小措施防范来自网络的ARP攻击 java程序员
    poj2299UltraQuickSort
    按位与或非
    hdu4325(线段树)
  • 原文地址:https://www.cnblogs.com/lalalazar/p/12019151.html
Copyright © 2011-2022 走看看