Mybatis中if标签判断不生效问题
mybatis映射文件中if、when判断失效
<if test="query.regionCode !=null and query.regionCode!=''">
<if test="query.regionLevel !=null and query.regionLevel != ''">
<choose>
<when test="query.regionLevel=='2'">
AND STREET_CODE is null
</when>
<when test="query.regionLevel=='3'">
and DISTRICT_CODE = #{query.regionCode}
</when>
<when test="query.regionLevel=='4'">
and STREET_CODE = #{query.regionCode}
</when>
</choose>
</if>
</if>
分析原因:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if、when等条件判断标签中的sql不会被解析。
解决方法1: 通过 .toString()将’0‘转为字符串
<if test="query.regionCode !=null and query.regionCode!=''">
<choose>
<when test="query.regionLevel != null and query.regionLevel == '2'.toString()">
AND STREET_CODE is null
</when>
<when test="query.regionLevel != null and query.regionLevel == '3'.toString()">
AND DISTRICT_CODE = #{query.regionCode}
</when>
<when test="query.regionLevel != null and query.regionLevel == '4'.toString()">
AND STREET_CODE = #{query.regionCode}
</when>
</choose>
</if>
解决方法2:单引号 换成双引号
<if test="query.regionCode !=null and query.regionCode!=''">
<choose>
<when test='query.regionLevel != null and query.regionLevel == "2"'>
AND STREET_CODE is null
</when>
<when test='query.regionLevel != null and query.regionLevel == "3"'>
AND DISTRICT_CODE = #{query.regionCode}
</when>
<when test='query.regionLevel != null and query.regionLevel == "4"'>
AND STREET_CODE = #{query.regionCode}
</when>
</choose>
</if>
解决方法3:java 传值为 数值类型 Integer int
<if test="query.regionCode !=null and query.regionCode!=''">
<choose>
<when test='query.regionLevel != null and query.regionLevel == 2'>
AND STREET_CODE is null
</when>
<when test='query.regionLevel != null and query.regionLevel == 3'>
AND DISTRICT_CODE = #{query.regionCode}
</when>
<when test='query.regionLevel != null and query.regionLevel == 4'>
AND STREET_CODE = #{query.regionCode}
</when>
</choose>
</if>