zoukankan      html  css  js  c++  java
  • 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字段默认值为系统时间

       

  • 相关阅读:
    inndo 表与存储逻辑_1
    msyql master thread
    redo log重做日志缓冲
    redo log 重做日志
    Latex 写算法伪代码
    Just for test
    ASP.NET Web API 2 OData v4教程
    MVC系统过滤器 OutputCacheAttribute
    MVC系统过滤器、自定义过滤器
    .NET如何从配置文件中获取连接字符串
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9252768.html
Copyright © 2011-2022 走看看