避免真实项目数据直接模拟说明,一样。
假设表:t_user
有一个字段:modify_time,类型:datetime2
然后用户需求是允许对已产生的字段设置成为空,比如:modify_time='2022-02-02 00:00:00 0000..00'
update t_user set modify_time=null;
很简单的需求用SQL执行也没问题,但是用mybatis执行时直接报异常:
不允许从数据类型varbinary到datetime2........
mybatis的实现代码:
update t_user set modify_time=#{modifyTime};
这样是不行的,直接报错
然后尝试把#改成使用$:
update t_user set modify_time=¥{modifyTime};
也是不行的,直接报错
最后只能直接使用原生的SQL拼接到xml中,同时还要兼容有值的处理:
update t_user set
<if test='modifyTime == null'>
modify_time=null
</if>
<if test='modifyTime != null'>
modify_time=#{modifyTime};
</if>