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,问题得以解决,祝君好运···


注:如果转载,请注明出处,尊重作者就是尊重自己~~

你可能感兴趣的:(mybatis,ibatis,ibatis,mybatis,mybatis,ibatis)