Mybatis判断Integer失效
问题
Mybatis传入Integer,值为0时,不更新
错误代码
实体类如下:
public class CompanyContact{
private Integer enabledFlag;
//其他属性忽略
}
mapper文件如下:
<if test="companyContact.defaultFlag!=null and companyContact.defaultFlag!=''">
and default_Flag =#{companyContact.defaultFlag}
</if>
原因
Mybatis在判断 int 类型时,0认为是空字符串,由于加了companyContact.defaultFlag!=’’,因此判断为false,不走 if 逻辑
解决
去掉 !=’’ 判断
<if test="companyContact.defaultFlag!=null">
and default_Flag =#{companyContact.defaultFlag}
</if>
其他(匹配 int 值)
<if test='number=="0".toString'>
<!--相关逻辑-->
</if>
<if test='number=="1".toString'>
<!--相关逻辑-->
</if>
当Mybatis在更新记录时,如果传入Integer类型的字段值为0,可能会遇到不更新的情况。问题源于Mybatis在判断int类型时,会将0视为空字符串。在mapper文件中的条件判断语句`<if test=companyContact.defaultFlag!=null and companyContact.defaultFlag!='' >`导致当`defaultFlag`为0时不执行更新操作。解决办法是去掉`companyContact.defaultFlag!=''`的判断,修改为`<if test=companyContact.defaultFlag!=null>`。此外,对于匹配int值,可以使用`<iftest='number==0.toString' >`和`<iftest='number==1.toString' >`来分别处理0和1的逻辑。
1260

被折叠的 条评论
为什么被折叠?



