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 中的条件设置。