1. .andNew() 表示 ( and()) ; 比.and()外层多一个括号, 比如如下sql, andNew就表示一个 and () ,()里面可以为其他的条件,最后要写到 .andNew()方法后,可以与1=1 结合使用,避免最后的sql出现 and () 的问题,and后面不接条件的问题:
SELECT COUNT(1)
FROM exp_report_header t
WHERE 1 = 1 AND (1 = 1 AND t.applicant_id = 1169519220299206657) AND (1 = 1 AND t.status IN (1001, 1002, 1003, 1005, 1004) AND 1 = 1);
2. .or() 表示 or .... ,()里可以与条件+sqlOr结合使用:
如下,表示只有transferEmployeeId 不为空的时候,才拼接这个or条件,并且传入的参数值等于第一个,后面可以传多个参数,使用顺序是{0},{1},{2}... ,此处用法比较通用,.and() , .andNew(),
.or(transferEmployeeId!=null,"t.transfer_employee_id!={0}",transferEmployeeId)
源码为:
.or()
public Wrapper or(boolean condition, String sqlOr, Object... params) {
if (condition) {
if (StringUtils.isEmpty(this.sql.toString())) {
this.AND_OR = "OR";
}
((SqlPlus)this.sql.OR()).WHERE(this.formatSql(sqlOr, params));
}
return this;
}
.orNew():
public Wrapper orNew(boolean condition, String sqlOr, Object... params) {
if (condition) {
if (StringUtils.isEmpty(this.sql.toString())) {
this.AND_OR = "OR";
}
((SqlPlus)this.sql.OR_NEW()).WHERE(this.formatSql(sqlOr, params));
}
return this;
}
.andNew():
public Wrapper andNew(String sqlAnd, Object... params) {
return this.andNew(true, sqlAnd, params);
}
....
以上几类均可以传多个参数,用法相似,可以归为一类。
3. .like()
.like(!StringUtils.isEmpty(requisitionNumber), "t.requisition_number", requisitionNumber)
4. .eq()
.eq(documentTypeId != null, "t.document_type_id", documentTypeId)
5. .in()
.in(CollectionUtils.isNotEmpty(status), "t.status", status)
6. 大于 gt,大于等于ge ,小于lt,小于等于le
.gt(reqDateFrom != null, "t.requisition_date", reqDateFrom)
.lt(reqDateTo != null, "t.requisition_date", reqDateTo)
7. 实战
Wrapper wrapper = new EntityWrapper()
.eq(tenantId != null, "t.tenant_id", tenantId)
.in(!CollectionUtils.isEmpty(ids), "t.id", ids)
.in(!CollectionUtils.isEmpty(companyId), "t.company_id", companyId)
.eq(documentTypeId != null, "t.document_type_id", documentTypeId)
.gt(reqDateFrom != null, "t.requisition_date", reqDateFrom)
.lt(reqDateTo != null, "t.requisition_date", reqDateTo)
.andNew("1=1")
.eq(applicantId != null, "t.applicant_id", applicantId)
.or(transferEmployeeId!=null,"t.transfer_employee_id!={0}",transferEmployeeId)
.andNew("1=1")
.in(CollectionUtils.isNotEmpty(status), "t.status", status)
.eq(!StringUtils.isEmpty(currencyCode), "t.currency_code", currencyCode)
.gt(amountFrom != null, "t.total_amount", amountFrom)
.lt(amountTo != null, "t.total_amount", amountTo)
.like(!StringUtils.isEmpty(remark), "t.description", remark)
.like(!StringUtils.isEmpty(requisitionNumber), "t.requisition_number", requisitionNumber)
.eq(unitId != null, "t.department_id", unitId)
.eq(!StringUtils.isEmpty(backlashFlag),"IFNULL(t.reverse_flag,'N')",backlashFlag)
.gt(cDateFrom != null, "t.audit_date", cDateFrom)
.lt(cDateTo != null, "t.audit_date", cDateTo)
.eq(transferToEmployeeId!=null,"t.transfer_to_employee_id",transferToEmployeeId)
.eq(!StringUtils.isEmpty(transferStatus),"t.transfer_status",transferStatus);
在mapper里:
List queryReportHeaderByids(@Param("ew") Wrapper hearderWrapper, RowBounds page);
然后在mybatis 的xml文件里映射:
${ew.sqlSegment}