MyBatis 参数允许为空的异常解决方案
最近在做一个采用了 MyBatis 框架的项目时,遇到一个这样的问题:
数据库中有一个表,表中有一个字段允许为空,因此,在 Java 代码中为这个表插入数据时,我们通常对该字段的处理大概是这样的:如果有值,自然是通过其 setter() 方法设置上即可;如果没有值,情况稍微麻烦一点点,一种做法是通过 setter() 方法传入 null 值,另一种做法是什么都不做(即不调用 setter() 方法)。对于以上两种情况,有值时自然一切顺利(除非你的程序设计本身烂得不行
);如果没有值时,问题接着就来了,运行时将抛出一类似以下这样的异常:
org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters...经过仔细研究和查阅资料,终于知道问题的根源了。原来出现这个异常的原因在于,MyBatis 不知道你传入的 null 参数对应的 jdbc 类型是什么,因为在 MyBatis 看来,null 在数据库中可以为多种类型(例如,可以为 CHAR、VARCHAR、DATE 等),于是 MyBatis 就傻眼了,解决办法自然是你要告诉 MyBatis 这个 null 对应的 jdbc 类型是什么。于是得出的答案如下:在你相应的 Mapper 中,传入该参数的地方写明 jdbc 类型即可,比如原来传参数是这样写的:#{myNullParameter},把它改成这样写即可:#{myNullParameter, jdbcType=VARCHAR}
OK,问题得以解决,祝君好运
注:如果转载,请注明出处,尊重作者就是尊重自己~~