zoukankan      html  css  js  c++  java
  • springBootJpa的复杂查询

    分页

    /**
         * 条件查询+分页
         * @param whereMap
         * @param page
         * @param size
         * @return
         */
        public Page<CaseManage> findSearch(Map whereMap, int page, int size,Integer createId) {
            Sort sort = new Sort(Sort.Direction.DESC,"id");
            Specification<CaseManage> specification = createSpecification(whereMap,createId);
            PageRequest pageRequest = new PageRequest(page,size,sort);
            return caseDao.findAll(specification, pageRequest);
        }
        
        /**
         * 条件查询
         * @param whereMap
         * @return
         */
        public List<CaseManage> findSearch(Map whereMap,Integer createId) {
            Specification<CaseManage> specification = createSpecification(whereMap, createId);
            return caseDao.findAll(specification);
        }
        
        /**
         * 动态条件构建
         * @param searchMap
         * @return
         */
        private Specification<CaseManage> createSpecification(Map searchMap,Integer createId) {
    
            return new Specification<CaseManage>() {
    
                @Override
                public Predicate toPredicate(Root<CaseManage> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                    List<Predicate> predicateList = new ArrayList<Predicate>();
                    // 案件名称
                    if (searchMap.get("case_name")!=null && !"".equals(searchMap.get("case_name"))) {
                        predicateList.add(cb.like(root.get("case_name").as(String.class), "%"+(String)searchMap.get("case_name")+"%"));
                    }
                    // 案件编号uuid类型
                    if (searchMap.get("case_uuid")!=null && !"".equals(searchMap.get("case_uuid"))) {
                        predicateList.add(cb.equal(root.get("case_uuid").as(String.class), (String)searchMap.get("case_uuid")));
                    }
                    return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));
    
                }
            };
    
        }

    or查询

    想实现这样的效果

    where (state=1 or state=2and name='zhangsan'

    java代码

    List<Predicate> predicateList = new ArrayList<Predicate>();
    Predicate or = cb.or(cb.and(cb.equal(root.get("case_authority").as(String.class), "0")), cb.and(cb.equal(root.get("create_id").as(String.class), String.valueOf(createId))));
    predicateList.add(or);
  • 相关阅读:
    mysql数据恢复
    数据库备份脚本
    SHELL syntax error:unexpected end of file 提示错误
    shell script 的追踪与 debug
    mysql Host ‘XXXXXX’ is blocked because of many connection errors
    linux下MySQL 5.6源码安装
    C# 数据库并发的解决方案(通用版、EF版)
    Thread(线程)四
    C#线程系列讲座(1):BeginInvoke和EndInvoke方法
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/10042306.html
Copyright © 2011-2022 走看看