java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis批量插入,有字段可能为null报错

mybatis批量插入时,有字段可能为null会报错问题

作者:鱼丸丸

这篇文章主要介绍了mybatis批量插入时,有字段可能为null会报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

解决方案

在指定了jdbcType的前提下, 在mybatis-config.xml文件中配置一下,添加settings配置,NULL要大写

如下:

 <settings> 
 	<!--插入为空时插入空值避免报空指针-->
 	 <setting name=“jdbcTypeForNull” value=“NULL”/>  
  <settings> 

如果是mybatis plus的话,在.yml里可以这样写:

mybatis-plus:
  configuration:
    jdbc-type-for-null: 'null' 

也可以修改配置文件类,很多种方式,其实都是把jdbcTypeForNull设为null,是不是批量操作都可以这么设

产生的原因

设置的JDBC类型为空时,某些驱动程序要指定值,默认是OTHER并不是BULL,mybatis此时是无法处理null值的

记一下mybatis常见配置设置

 <!– 配置设置 –>  
 <settings>  

  <!– 配置全局性 cache 的 ( 开 / 关) default:true –>  

 <setting name=“cacheEnabled” value=“true”/>  



 <!– 是否使用 懒加载 关联对象  同 hibernate中的延迟加载 一样  default:true –>  

<setting name=“lazyLoadingEnabled” value=“true”/>  



<!– [当对象使用延迟加载时 属性的加载取决于能被引用到的那些延迟属性,否则,按需加载(需要的是时候才去加载)] –>  

<setting name=“aggressiveLazyLoading” value=“true”/>  



<!– 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true –>  
 <setting name=“multipleResultSetsEnabled” value=“true”/>  



 <!– 是否可以使用列的别名 (取决于驱动的兼容性) default:true–>  

 <setting name=“useColumnLabel” value=“true”/>  
            

 <!–允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:false–>  
<setting name=“useGeneratedKeys” value=“false”/>  

             

<!–指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部–>  
<setting name=“autoMappingBehavior” value=“PARTIAL”/>  


              
<!– 这是默认的执行类型   

        SIMPLE :简单    

        REUSE:执行器可能重复使用prepared statements 语句   

        BATCH:执行器可以重复执行语句和批量更新  

 –>  
<setting name=“defaultExecutorType” value=“SIMPLE”/>  
             
             

<!– 设置驱动等待数据响应的超时数  默认没有设置–>  

<setting name=“defaultStatementTimeout” value=“25000″/>  


            
<!– [是否启用 行内嵌套语句  defaut:false] –>  

<setting name=“safeRowBoundsEnabled” value=“false”/>  

              

<!– [是否 启用  数据中 A_column 自动映射 到 java类中驼峰命名的属性 default:fasle] –>  

<setting name=“mapUnderscoreToCamelCase” value=“false”/>  

             

<!– 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session –>  

<setting name=“localCacheScope” value=“SESSION”/>  

              

<!– 设置但JDBC类型为空时,某些驱动程序要指定值,default:OTHER –>  

<setting name=“jdbcTypeForNull” value=“DEFAULT”/>  

              

 <!– 设置触发延迟加载的方法  –>  
<setting name=“lazyLoadTriggerMethods” value=“equals,clone,hashCode,toString”/>  
             

 </settings> 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文