问题: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>