问题:springcould项目中有一个多条件查询的场景,其中有一个条件项是下拉框,其中的type值类型是int,分别是0和1。写完测试发现其他查询条件都好用,唯独当type值为0的时候这个条件直接被代码无视了。

<where>
      <if test="legalCode != null and legalCode != ''">
        and tils.legal_code= #{legalCode,jdbcType=VARCHAR}
      </if>
      <if test="companyName != null and companyName != ''">
        and tils.company_name like concat('%',#{companyName,jdbcType=VARCHAR},'%')
      </if>
      <if test="isFranchisees != null and isFranchisees !=''">
        and tils.is_franchisees= #{isFranchisees,jdbcType=TINYINT}
      </if>
      <if test="applicationStatus != null and applicationStatus != ''">
        and tsma.application_status= #{applicationStatus,jdbcType=VARCHAR}
      </if>
    </where>

原因:因为当isFranchisees 的值为0的时候,它的数据类型为Integer,Mybatis是认为0为' ' 的,所以这个判断是为false,所以下面这个下面这个查询查询条件会直接被过滤掉。

解决:所以直接把 isFranchisees !='' 这个条件删掉就可以

<if test="isFranchisees != null">
        and tils.is_franchisees= #{isFranchisees,jdbcType=TINYINT}
      </if>