mybatis批量增加(oracle,mysql)
2015-11-27 15:09
567 查看
最近工作中有批量导入需求,最开始用循环单条插入(因为当时限制最多30条,效率感觉没什么影响),后来用户提议能不能一次100条,为了提高程序效率就想到了用mybatis的批量插入。
主键采用序列增长,数据库是oracle,代码如下:
执行后控制台打印出来的SQL是(两条记录的SQL):
insert into
PRESON
select
SEQ_PRESON_ID.NEXTVAL,A.* from (
SELECT ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? from dual
UNION SELECT ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? from dual )A
注:union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
因此如果有要求重复记录不被合并时,需要将foreach标签的separator属性的值改为union
all。
数据库是mysql,代码如下 :
<insert id="insertBatch" parameterType="ArrayList">
insert intoPRESON
values
<foreach collection="list"item="obj" index="index"separator="," >
主键采用序列增长,数据库是oracle,代码如下:
执行后控制台打印出来的SQL是(两条记录的SQL):
insert into
PRESON
select
SEQ_PRESON_ID.NEXTVAL,A.* from (
SELECT ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? from dual
UNION SELECT ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? from dual )A
注:union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
因此如果有要求重复记录不被合并时,需要将foreach标签的separator属性的值改为union
all。
数据库是mysql,代码如下 :
<insert id="insertBatch" parameterType="ArrayList">
insert intoPRESON
values
<foreach collection="list"item="obj" index="index"separator="," >
相关文章推荐
- Oracle导入导出
- Oracle导入导出
- oracle 11G rac 安装
- oracle的用户session
- Oracle服务一键启动/关闭
- Oracle索引重建
- Oracle常用sql
- Oracle视图
- oracle 存储过程返回 结果集 table形式 (使用sys_refcursor 及程序包package 两种方式)
- ORACLE中的支持正则表达式的函数
- Oracle PL/SQL进阶
- oracle编译 失效对象方式
- oracle查询最占用资源的查询
- ORACLE如何停止一个JOB
- oracle 权限管理
- java连接oracle数据库,自己封装的几个方法
- 深入理解Oracle的imp/exp 和各版本之间的规则
- Oracle12C安装:Could not initialize class sun.awt.X11.XToolkit
- oracle数据库关闭和启动命令
- Oracle空值做计算注意啦