美文网首页
复杂查询的实践

复杂查询的实践

作者: 焱魔王 | 来源:发表于2017-12-11 14:02 被阅读0次

原创 时间:2017/12/11

查询条件定义

@Data
public class AppConditionRequest {
    int index;
    int size;
    /**
     * 应用名称搜索关键字
     */
    String appNameKey;
    /**
     * 系统架构id
     */
    String sysarchitectureid;
    /**
     * 软件来源id
     */
    String sourceid;
    /**
     * 软件注册时间范围--起点
     */
    long startTime;
    /**
     * 软件注册时间范围--终点
     */
    long endTime;
    /**
     * 应用所属部门id
     */
    String deptId;
}

注:此处使用lombok的@Data标签省略了get/set方法。

自定义多条件查询

   /**
     * 根据条件检索应用
     * @param appNameKey app名称模糊查询关键字
     * @param sysarchitectureid 系统架构id
     * @param sourceid 软件来源id
     * @param startTime 系统启用时间范围检索--起点时间
     * @param endTime 系统启用时间范围检索--终点时间
     * @param deptId 应用所属部门
     * @return
     */

    public static Specification<AppVo> getAppByCondition(String appNameKey,
                                                         String sysarchitectureid,
                                                         String sourceid,
                                                         long startTime,
                                                         long endTime,
                                                         String deptId){
        return new Specification<AppVo>() {
            @Override
            public Predicate toPredicate(Root<AppVo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
                List<Predicate> predicates = new ArrayList<>();
                if(!"".equals(appNameKey)&&appNameKey!=null){
                    predicates.add(builder.like(root.get("name"),"%"+appNameKey+"%"));
                }
                if(!"".equals(sourceid)&&sourceid!=null){
                    predicates.add(builder.equal(root.get("sourceid"),sourceid));
                }
                if(!"".equals(sysarchitectureid)&&sysarchitectureid!=null){
                    predicates.add(builder.equal(root.get("sysarchitectureid"),sysarchitectureid));
                }
                if(!"".equals(deptId)&&deptId!=null){
                    predicates.add(builder.equal(root.get("deptid"),deptId));
                }
                if(startTime!=0&&endTime!=0){
                    if(endTime>=startTime) {
                        predicates.add(builder.between(root.get("registdate"), startTime,endTime));
                    }else{
                        log.error("-------------->end time less than start time!");
                        return null;
                    }
                }
                return builder.and(predicates.toArray(new Predicate[predicates.size()]));
            }
        };
    }

自定义多条件查询类使用

 /**
     * 根据条件查询应用(名称关键字、系统架构、软件来源、时间范围、部门id)
     * @param conditions
     * @return
     */

    public Object getAppByConditions(AppConditionRequest conditions){
        Page<AppVo> ResultList = null;
        //分页
        if(conditions.getIndex()!=0||conditions.getSize()!=0) {
            Sort sort = new Sort(Sort.Direction.DESC,"registdate");
            PageRequest pageRequest = new PageRequest(conditions.getIndex(), conditions.getSize(),sort);
            ResultList = this.repo.findAll(CustomerSpecs.getAppByCondition(conditions.getAppNameKey(),
                    conditions.getSysarchitectureid(),
                    conditions.getSourceid(),
                    conditions.getStartTime(),
                    conditions.getEndTime(),
                    conditions.getDeptId()), pageRequest);
        }
        if (ResultList!=null&&ResultList.getSize()>0) {
            List<AppResponse> vos = new ArrayList<>();
            ResultList.forEach(vo -> {
                try {
                    vos.add(new AppResponse(vo));
                } catch (Exception e) {
                }
            });
            return ResultFormat.getResult(vos,conditions.getIndex(),conditions.getSize(),(int)ResultList.getTotalElements());
        } else {
            log.info("---------------cannot find apps!");
            return null;
        }
    }

相关文章

  • 复杂查询的实践

    原创 时间:2017/12/11 查询条件定义 注:此处使用lombok的@Data标签省略了get/set方法。...

  • arango增删改查

    arango实践 插入数据 修改数据 插入数据 查询数据 复杂查询 多表查询

  • arango的AQL

    arango实践 插入数据模板 修改数据模板 插入数据 查询数据 复杂查询 多表查询 图查询

  • SQL查询语句1

    复杂查询 = 简单查询 + 限定查询 + 查询排序 + 多表查询 + 分组统计查询 + 子查询。 面对所有的复杂查...

  • 复杂查询

  • mysql中explain中各个字段介绍

    select_type :对应查询复杂,simple是简单查询,不包含子查询和union查询。复杂查询不怎么用到,...

  • JdbcTemplate

    查询操作 复杂查询 复杂查询二:查询出来后封装为实体对象(通过RowMapper将类的属性与表的字段进行映射) 使...

  • Django: 查询

    使用Q进行复杂的查询 模糊查询 精确匹配 聚合查询

  • 复杂的分组查询

    一些说明 在 MySQL 中通过 GROUP BY 进行分组查询,只会在每个组中出现一条数据。这一条数据并不是从改...

  • mysql复杂查询--多表查询

    多表查询 多表查询是指基于两个和两个以上的表或是视图的查询.在实际应用中,查询单个表可能不能满足你的需求,(如显示...

网友评论

      本文标题:复杂查询的实践

      本文链接:https://www.haomeiwen.com/subject/yoeiixtx.html