ibatis 批量插入

摘要:
Ibatis批量插入CreationTime--2018年7月2日10:21作者:Marydon1.基于oracle的SQL语句描述2.主键ID具有默认值,例如sys_如果guid()ID具有默认值则插入时不会声明字段。当插入一段数据时,oracle会自动生成id。2020/04/21效果显示了实际的SQL插入结果:id字段是一个序列,序列已经在上面查询过;createtime字段的默认值是与系统时间相关的建议:从javaList集合Oracle插入表数据的几种方法
 
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

ibatis 批量插入第1张

  插入结果:id字段是序列,上面已经对序列进行了查询;createtime字段默认值为系统时间

ibatis 批量插入第2张

   

 

免责声明:文章转载自《ibatis 批量插入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#(99):加密与解密 Sytem.Security.CryptoGraphyC#_MySql 主从复制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql数据库编码问题

一:插入数据乱码 ①:数据库的字符集不对,需要修改成utf-8;如果解决不了走第二步 ②: var cmd = new MySqlCommand(“set names utf8”);如果解决不了走第三步 ③:把“Charset=utf8”加载数据库连接字符串后边即可。在解决不了没辙了,换数据库吧!  二:获取有乱码问题  Incorrect strin...

C#2.0泛型-Dictionary,List的用法

泛型最常见的用途是创建集合类。 .NETFramework类库在System.Collections.Generic命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如System.Collections命名空间中的ArrayList,HashTable等。 下面我们就来说下,几个泛型集合类的用法: 一.Dictionary 此类在.N...

admin 的使用及参数配置

admin的使用 创建超级用户 在admin.py注册模型表 admin.site.register(models.author) django默认注册两张自带的表 admin 生成自定义模型url的规律 http://127.0.0...

QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)

QList<T> 的释放分两种情况: 1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码 #include <QtCore/QCoreApplication>#include <QList>#include <QString> int main(int argc, char *...

java集合类笔试选择题整理含答案

1、ArrayList list=new ArrayList(20);中的list扩充几次()A. 0B. 1C. 2D. 3答案:A分析:已经指定了长度, 所以不扩容2.List、Set、Map哪个继承自Collection接口,一下说法正确的是()A. List MapB. Set MapC. List SetD. List Map Set答案:C分析...

MySQL高级知识(八)——ORDER BY优化

前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。 0.准备 #1.创建test表。 drop table if exists test; create table test( id int primary key auto_increment, c1 var...