mybatis进行批量插入 返回批量插入主键ID 插入不成功等问题

这篇博文讲的是批量插入的例子

dao层框架用的mybatis 最一开始我的批量插入其实是个伪批量 是类似吧很多条insert into语句 直接拼成一条  然后直接运行

发现这样的效率真的是十分低 我做测试时285条数据 插入一次需要10S多

而当我修改sql的写法:


  	
  	
  		insert into cus_sh_gongziceshi
  		( applicant,createtime,isdel,
  		
  		
  			
  				${key1}
  			
  		
  		
  		) values
  		
  		
  			(${table2.applicant},#{table2.time,jdbcType=TIMESTAMP},0 ,
  				
  					${table.map[key2]}
  				
  			)
  		
  		
  		
  
出来的效果大概是 insert into table (a , b c) values(1,2,3),(1,2,3)

这种插入语句方式才是真正的批量插入 执行只需要0.2s左右 快了50多倍

请注意 这种写法 foreach里的collection必须是list 不然会报错 另外还有很重要的一点 mybatis是默认不支持批量插入的

你需要在你的jdbc连接信息中的URL 后加上allowMultiQueries=true

但是使用这种插入方式也带来了其他的一些问题

比如 如何返回主键ID 在插入字符串类型数据时会报错等


首先关于如何返回主键ID  我在网上翻阅大量资料后发现 我使用的mybatis版本有点低 不支持批量插入返回ID  只有mybatis3.3.1 以上的版本才可以

这是mybatis3.3.1整合spring的jar包 mybatis-spring

这是mybatis 3.3.1的jar包 下载链接mybatis3.3.1

这是mybatis3.4 和对应的spring整合mybatis的 maven依赖


    org.mybatis
    mybatis
    3.4.0


    org.mybatis
    mybatis-spring
    1.3.0
关于返回主键ID  你需要在insert标签中 添加
 useGeneratedKeys="true" keyProperty="id"
keyProperty就是你要返回的主键ID接受的属性名了


在批量插入中还有一个经常被大家忽略的问题 : 在插入string类型的数据时 要加上' ' 单引号

不然你插入中文的话会 报 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '??????' in 'field list'



你可能感兴趣的:(mybatis)