zoukankan      html  css  js  c++  java
  • mybatis oracle mysql 批量插入时的坑爹问题--需谨记

    mybatis oracle mysql 批量插入
    一、oracle的批量插入方式
    insert into db(id, zgbh, shbzh)
    select '1', '2', '3' from dual
    union all select '2', '3', '4' from dual
    union all select '3', '4', '5' from dual
    union all select '4', '5', '6' from dual
    union all select '5', '6', '7' from dual
    <insert id="insertMoSmsList" parameterType="com.xxx.XxxBean">
    INSERT INTO TBL_xxx_DETAIL
    (
    id, zgbh, shbzh, ReceiveTime
    ) SELECT SEQ_xxx_DETAIL.NEXTVAL, A.* FROM(
    <foreach collection="list" item="item" index="index" separator="UNION ALL">
    <![CDATA[
    SELECT
    #{item.id, jdbcType=INTEGER} AS id,
    #{item.zgbh, jdbcType=VARCHAR} AS zgbh,
    #{item.shbzh, jdbcType=VARCHAR} AS shbzh,
    TO_DATE(#{item.receiveTime, jdbcType=DATE},'yyyy-mm-dd hh24:mi:ss') AS ReceiveTime
    FROM dual
    ]]>
    </foreach>
    ) A
    </insert>
    二、mysql的批量插入方式
    INSERT INTO MyTable(ID,NAME) VALUES (7,'003'),(8,'004'),(9,'005')
    <insert id="insertBatch" >
    insert into student ( NAME,SEX,ADDRESS,TELEPHONE,TID)
    values
    <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
    #{item.name},
    #{item.sex},
    #{item.address},
    #{item.telephone},
    #{item.tId}
    </foreach>
    </insert>

    三、容易发生的异常(坑爹)
    1. "A.*" 无效列
    引用 ORA-00918:未明确定义列
    解决方法:
    #{item.senderPhone, jdbcType=VARCHAR} AS SenderPhone
    如果不设置列名,那么#{item.senderPhone}的值就是默认列名,那么就有很多概率会产生列名重复,而产生异常。(两个列的值完全可能一样)
    2. #{item.receiveTime} 值为null时,必须指定转换类型
    引用 JDBC requires that the JdbcType must be specified for all nullable parameter
    MyBatis 插入空值时,需要指定JdbcType
    mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换;
    解决方法:
    因为你传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。
    你只要在insert语句中insert的对象加上jdbcType就可以了,修改如下:
    #{item.receiveTime, jdbcType=DATE} AS ReceiveTime,
    TO_DATE(#{item.receiveTime, jdbcType=DATE},'yyyy-mm-dd hh24:mi:ss') AS ReceiveTime,

  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/aoshicangqiong/p/7851745.html
Copyright © 2011-2022 走看看