ibatis 批量插入
ibatis 批量插入
CreationTime--2018年7月2日10点21分
Author:Marydon
1.说明
基于oracle的sql语句
2.主键id有默认值,比如:sys_guid()
id有默认值的情况下,插入的时候,不再声明该字段,当插入一条数据的时候,oracle会自动生成id。
<insert id="insertCONSULT_SCHEDULE_batch" parameterClass="java.util.List">
INSERT ALL
<iterate conjunction=" ">
INTO CONSULT_SCHEDULE
(ORG_CODE,DEPENT_ID,DEPENT_NAME,DOCTOR_ID,DOCTOR_NAME,DOCTOR_PHONE,SCHEDULE_DATE,WEEK_TXT,WB_TYPE,CLOSE_TZ,REPLACE_TZ,REMARK)
VALUES
<![CDATA[
(#list[].ORG_CODE:VARCHAR#,
#list[].DEPENT_ID:VARCHAR#,
#list[].DEPENT_NAME:VARCHAR#,
#list[].DOCTOR_ID:VARCHAR#,
#list[].DOCTOR_NAME:VARCHAR#,
#list[].DOCTOR_PHONE:VARCHAR#,
TO_DATE(#list[].SCHEDULE_DATE#,'yyyy-MM-dd'),
#list[].WEEK_TXT:VARCHAR#,
#list[].WB_TYPE:VARCHAR#,
#list[].CLOSE_TZ:VARCHAR#,
#list[].REPLACE_TZ:VARCHAR#,
#list[].REMARK:VARCHAR#)
]]>
</iterate>
SELECT 1 FROM DUAL
</insert>
字符串需要声明jdbc类型为VARCHAR,可以做数据类型转换;
当表字段设有默认值时,可以不插入该字段,数据库在插入该条记录时,会自动为设有默认值的字段插入默认值。
3.主键id使用序列
id使用序列,需要先查出来序列的值作为id,手动插入到数据库。
<!-- 图像表 批量插入sql -->
<insert id="insertIMAGE_INFOBatch" parameterClass="java.util.List">
INSERT INTO IMAGE_INFO
(ID,FORM_LIST_ID,IMAGE_NAME)
SELECT SEQ_IMAGE_INFO.NEXTVAL,FORM_LIST_ID,IMAGE_NAME FROM
(
<iterate conjunction="UNION ALL" prepend="">
<![CDATA[
SELECT #list[].FORM_LIST_ID:DECIMAL# AS FORM_LIST_ID,
#list[].IMAGE_NAME:VARCHAR# AS IMAGE_NAME FROM DUAL
]]>
</iterate>
)
</insert>
由于oracle的序列的数据类型是number,因此其对应的jdbc类型为DECIMAL。
4. 注意
iBATIS使用这种批量插入操作,局限性在于:
每次插入的总数据不能超过1000(插入字段数*插入行数<=1000),使用大集合拆分成小集合的方式来限制每次插入数量不超过1000即可。
2020/04/21
效果展示
实际执行的sql
插入结果:id字段是序列,上面已经对序列进行了查询;createtime字段默认值为系统时间
相关推荐:
ibatis 批量插入的更多相关文章
- IBatis批量插入数据
IBatis插入注意,数据量比较多的花,需要分批插入,策略是dao里面控制插入批次,mapper里面批量插入即可 @Override public Long insertBatch(List<W ...
- Java使用iBatis批量插入数据到Oracle数据库
Java使用iBatis批量插入数据到Oracle数据库 因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数 ...
- mysql+ibatis 批量插入
述:相比oracle批量插入,mysql批量插入就简单的多了,mysql支持values后面跟多条数据,进行批量插入,并且主键可以自增,不像oracle会遇到序列问题. 1.建表 CREATE TAB ...
- oracle+ibatis 批量插入-支持序列自增
首先请先看我前面一篇帖子了解oracle批量插入的sql:[oracle 批量插入-支持序列自增] 我用的ibatis2.0,sqlMap文件引入的标签如下: <!DOCTYPE sqlMap ...
- ibatis 批量插入oracle总结
1. 使用批量插入最先想到如下的插入语句 insert into a (id,name) values('','') ,('','') 但是 oracle 并不支持这种写法 然后查询得知可以使用如下写 ...
- IBatis 批量插入数据
sql语句 <!--批量插入待收流水--> <insert id="BatchInsertOrder" parameterClass="ArrayLis ...
- IBatis 批量插入数据之SqlBulkCopy
public void AddLetters(IList<int> customerIds, string title, string content, LetterEnum.Letter ...
- oracle 批量插入-支持序列自增
1.创建表.序列 -- Create table create table test_batch ( id number not null, name ), account ) ) -- Create ...
- IBatis.Net 批量插入数据
利用了iterate标签来做的: 先看iterate标签几个属性的: prepend-加在open指定的符号之前的符号,添加在语句的前面(可选) property-类型为ArrayList的用于遍历的 ...
随机推荐
- Java并发(十):读写锁ReentrantReadWriteLock
先做总结: 1.为什么用读写锁 ReentrantReadWriteLock? 重入锁ReentrantLock是排他锁,在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服 ...
- PHP -- 8个必备的PHP功能开发
原文出处:http://www.codeceo.com/8-php-functions.html 做过PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得 ...
- hdu 5234 Happy birthday 背包 dp
Happy birthday Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- iOS开发系列——内购、GameCenter、iCloud、Passbook系统服务开发汇总
社交 Social 现在很多应用都内置“社交分享”功能,可以将看到的新闻.博客.广告等内容分享到微博.微信.QQ.空间等,其实从iOS6.0开始苹果官方就内置了Social.framework专门来实 ...
- java同步ldap实例
1.准备过程 1.1 在windows server 2008 R2操作系统下搭建AD域,不懂得看链接地址:http://99532720.blog.51cto.com/2194488/696611 ...
- Cascode MOSFET increases boost regulator's input- and output-voltage ranges
Targeting use in portable-system applications that require raising a battery's voltage to a higher l ...
- Linux下OOM Killer机制详解
http://www.cnblogs.com/ylqmf/archive/2012/11/05/2754795.html http://wuquan-1230.blog.163.com/blog/st ...
- Effective JavaScript Item 51 在类数组对象上重用数组方法
Array.prototype对象上的标准方法被设计为也能够在其他对象上重用 - 即使不是继承自Array的对象. 因此,在JavaScript中存折一些类数组对象(Array-like Object ...
- MS Sql Server 中主从库的配置和使用介绍
网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据 ...
- Android 下文件cannot execute - Permission denied
安卓下执行交叉编译的可执行文件发现提示不允许. 原因是mount的方式问题,root后运行 su mount -o rw,remount /mnt/sdcard 就可以了 mount -o rw,re ...