mybatis plus的sql片wrapper的使用

 

 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}

 

你可能感兴趣的:(mybatis,sql片)