tk.mybatis Example 多个or条件拼接

//需要的查询条件为 a and (b or c or d) 可以转换为 (a and b) or (a and c) or (a and d)

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;
    }

//第二种方式 可以直接写sql
Example.Criteria criteria2 = example.createCriteria();
String validTimeSql = getValidTimeSql(request.getStartTime(), request.getEndTime());// (b or c or d)
criteria2.andCondition(validTimeSql);
example.and(criteria2);
 

 

转载于:https://www.cnblogs.com/liw66/p/10996549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值