zoukankan      html  css  js  c++  java
  • tk.mybatis 多个or条件拼接

    //需要的查询条件为 a and (b or c or d) 可以转换为 (a and b) or (a and c) or (a and d)
    //第一种方式 使用andEqualTo拼接条件
    private Example madeExample(R request) {
            Example example = new Example(C.class);
            example.setOrderByClause("createddat desc");
            Example.Criteria c = example.createCriteria();
            Example.Criteria c1 = example.createCriteria();
            Example.Criteria c2 = example.createCriteria();
            c.andEqualTo("activityType", (byte) 1);
            c1.andEqualTo("activityType", (byte) 1);
            c2.andEqualTo("activityType", (byte) 1);
            c.andEqualTo("deleteState", (byte) 1);
            c1.andEqualTo("deleteState", (byte) 1);
            c2.andEqualTo("deleteState", (byte) 1);
            if (StringUtils.isNotBlank(request.getCompanyId())) {
                c.andEqualTo("companyId", request.getCompanyId());
                c1.andEqualTo("companyId", request.getCompanyId());
                c2.andEqualTo("companyId", request.getCompanyId());
            }
            if (StringUtils.isNotBlank(request.getActivityState())) {
                c.andEqualTo("activityState", request.getActivityState());
                c1.andEqualTo("activityState", request.getActivityState());
                c2.andEqualTo("activityState", request.getActivityState());
            }
            if (StringUtils.isNotBlank(request.getCreatedby())) {
                c.andEqualTo("createdby", request.getCreatedby());
                c1.andEqualTo("createdby", request.getCreatedby());
                c2.andEqualTo("createdby", request.getCreatedby());
            }
            if (StringUtils.isNotBlank(request.getCreateddatStart()) && StringUtils.isNotBlank(request.getCreateddatEnd())) {
                c.andGreaterThanOrEqualTo("createddat", request.getCreateddatStart());
                c1.andGreaterThanOrEqualTo("createddat", request.getCreateddatStart());
                c2.andGreaterThanOrEqualTo("createddat", request.getCreateddatStart());
                String endDate = request.getCreateddatEnd();
                if (!endDate.contains(" ")) {
                    endDate += " 23:59:59";
                }
                c.andLessThanOrEqualTo("createddat", endDate);
                c1.andLessThanOrEqualTo("createddat", endDate);
                c2.andLessThanOrEqualTo("createddat", endDate);
            }
            if (StringUtils.isNotBlank(request.getMerchandise())) {
                c.andLike("activityRule", "%" + request.getMerchandise() + "%");
                c1.andLike("activityRule", "%" + request.getMerchandise() + "%");
                c2.andLike("activityRule", "%" + request.getMerchandise() + "%");
            }
            //校验有效期
            if (StringUtils.isNotBlank(request.getValidStart()) && StringUtils.isNotBlank(request.getValidEnd())) {
                String endDate = request.getValidEnd();
                if (!endDate.contains(" ")) {
                    endDate += " 23:59:59";
                }
                c.andBetween("validStart", request.getValidStart(),endDate);
                c1.andBetween("validEnd",request.getValidStart(),endDate);
                c2.andCondition("valid_start <=",request.getValidStart());
                c2.andCondition("valid_end >=",endDate);
                example.or(c1);
                example.or(c2);
            }
            return example;
        }
    
    //第二种方式 使用andCondition拼接sql
    private Example madeExample1(ZnyOilActivityConsumeRequest request) {
        Example example = new Example(ZnyOilActivityMerch.class);
        example.setOrderByClause("createddat desc");
        Example.Criteria c = example.createCriteria();
        c.andEqualTo("activityType", (byte) 1);
        c.andEqualTo("deleteState", (byte) 1);
        if (StringUtils.isNotBlank(request.getEnterpriseId())) {
            c.andCondition("company_id = '"+request.getEnterpriseId()+"'");
        }
        if (StringUtils.isNotBlank(request.getActivityState())) {
            c.andCondition("activity_state = "+request.getActivityState());
        }
        if (StringUtils.isNotBlank(request.getCreatedby())) {
            c.andCondition("createdby = '"+request.getCreatedby()+"'");
        }
        if (StringUtils.isNotBlank(request.getCreateddatStart()) && StringUtils.isNotBlank(request.getCreateddatEnd())) {
            String createddatStart = request.getCreateddatStart();
            String createddatEnd = request.getCreateddatEnd();
            if (!createddatEnd.contains(" ")) {
                createddatEnd += " 23:59:59";
            }
            c.andCondition("createddat between '"+createddatStart+"' and '"+createddatEnd+"'");
        }
        if (StringUtils.isNotBlank(request.getMerchandise())) {
            c.andCondition("activity_rule like '%" + request.getMerchandise() + "%'");
        }
        //校验有效期逻辑
        if (StringUtils.isNotBlank(request.getValidStart()) && StringUtils.isNotBlank(request.getValidEnd())) {
            String validStart = request.getValidStart();
            String validEnd = request.getValidEnd();
            if (!validEnd.contains(" ")) {
                validEnd += " 23:59:59";
            }
            c.andCondition("((valid_start between '"+validStart+"' and '"+validEnd+"') or (valid_end between '"+validStart+"' and '"+validEnd+"') or (valid_start <= '"+validStart+"' and valid_end >= '"+validEnd+"'))");
        }
        return example;
    }
     
    //第三种方式 可以直接在CustomMapper文件里面用Mybatis方法写查询sql
  • 相关阅读:
    VC++6.0在win8.1系统下运行失败的解决办法
    oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
    Myeclipse 2014破解教程
    关于js赋值给input解析
    java时间格式
    Idea报错Check $M2_HOME environment variable and mvn script match.
    新博客
    理解jquery的$.extend()、$.fn和$.fn.extend()
    在vs code中使用ftp-sync插件实现客户端与服务器端代码的同步
    js字符串倒序
  • 原文地址:https://www.cnblogs.com/liw66/p/10996549.html
Copyright © 2011-2022 走看看