mybatis进行批量插入 返回主键ID 插入不成功等问题
来源:互联网 发布:淘宝hot小图标 编辑:程序博客网 时间:2024/06/05 13:34
最近在做公司的工资系统 因为每个月都要对每个人的工资进行数据的核算和工资发放工作的审核 所以需要大量插入数据
dao层框架用的mybatis 最一开始我的批量插入其实是个伪批量 是类似吧很多条insert into语句 直接拼成一条 然后直接运行
发现这样的效率真的是十分低 我做测试时 公司285人的工资 插入一次需要10S多
而当我修改sql的写法:
<insert id="addFlowTableItemNullList" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" > insert into cus_sh_gongziceshi ( applicant,createtime,isdel, <foreach collection="list" item="table" index="a" > <if test="a == 0"> <foreach collection="table.map.keys" item="key1" separator=","> ${key1} </foreach> </if> </foreach> ) values <foreach collection="list" item="table2" separator=","> (${table2.applicant},#{table2.time,jdbcType=TIMESTAMP},0 , <foreach collection="table2.map.keys" item="key2" separator=","> ${table.map[key2]} </foreach> ) </foreach> </insert>出来的效果大概是 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.4 和对应的spring整合mybatis的 maven依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version></dependency>关于返回主键ID 你需要在insert标签中 添加
useGeneratedKeys="true" keyProperty="id"keyProperty就是你要返回的主键ID接受的属性名了
在批量插入中还有一个经常被大家忽略的问题 : 在插入string类型的数据时 要加上' ' 单引号
不然你插入中文的话会 报 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '??????' in 'field list'
阅读全文
1 0
- mybatis进行批量插入 返回主键ID 插入不成功等问题
- Mybatis 批量插入返回 主键ID
- Mybatis批量插入返回插入成功后的主键id
- Mybatis批量插入返回插入成功后的主键id
- MyBatis批量插入返回主键
- mybatis返回主键,批量插入
- Mybatis+Mysql 批量插入的时候返回主键ID
- MyBatis-----MyBatis插入返回主键ID
- mybatis关于插入返回主键ID问题(mysql)
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- MyBatis+MySQL 返回插入的主键ID
- codeforces 584D(哥德巴赫猜想)
- 设计模式-简单工厂模式
- UART和USART的区别
- 多进程与多线程的选择问题
- 神奇的HyperLogLog算法【转载 #涉及到数学原理】
- mybatis进行批量插入 返回主键ID 插入不成功等问题
- 数组操作
- HDU 6125 Free from square (状压 dp , 2017 Multi-Univ Training Contest 7)
- 在VS中C++折叠代码的方式
- Linux终端没有GUI,如何使用matplotlib绘图
- Java设计模式——代理模式
- 第一期阿里云高校工作坊申办启动
- UE4 显示帧率的几种姿势
- Python的KeyboardSwitch() missing 8解决方法