mybatis :Criteria 查询、条件过滤用法

2022-04-13 16:13:07 浏览数 (1)

PS:hibernate 中也有 Criteria 的用法,见另一文章:jpa : criteria 作排除过滤、查询

1. 包:

代码语言:javascript复制
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;

2. 使用:

代码语言:javascript复制
    public void getQueryExampleByCondition(Example example, OrderQuery query) {

        Criteria criteria1 = example.createCriteria();

        // 设置 criteria2 与 criteria1 为 or 方式关联
        Criteria criteria2 = example.or(); 
       
        if (query != null) {
            
            if (query.getLoadSrc() != null && query.getLoadSrc() != -1) {
                criteria1.andEqualTo("loadSrc", query.getLoadSrc());
            }
                    
            if (!StringUtil.isEmpty(query.getOrderNo())) {
                criteria1.andLike("orderNo", "%"   query.getOrderNo()   "%");
            }

            // 以下 3 个会用 OR 方式加上 criteria2 中的条件
            if (query.getStatus() != null && query.getStatus() != -1) {
                criteria1.andEqualTo("status", query.getStatus());
                criteria2.andEqualTo("status", query.getStatus());
            }

            if (!StringUtil.isEmpty(query.getRepayDateEnd())) {
                criteria1.andLessThanOrEqualTo("repayDate", query.getRepayDateEnd());
                criteria2.andLessThanOrEqualTo("repayDate", query.getRepayDateEnd());
            }

            if (!StringUtil.isEmpty(query.getLoanDay())) {
                criteria1.andEqualTo("loanDay", query.getLoanDay());
                criteria1.andEqualTo("loanDay", query.getLoanDay());
            }

        }
    }

其中 criteria1 和 criteria2 是 or 的关系。

根据传入参数不同,执行 sql 效果类似:

代码语言:javascript复制
SELECT * FROM xxxx WHERE (load_type = 5 AND loan_day = 7) OR (order_No = 5) 

where 后面第一个圆括号中的条件组合 load_type = 5 AND loan_day = 7 是 criteria1中的条件,

第二个圆括号中的条件 order_No = 5 是 criteria2 中的条件设置。

0 人点赞