zoukankan      html  css  js  c++  java
  • mybatis批量插入应用

    一、foreach简单介绍

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

    foreach元素的属性主要有item,index,collection,open,separator,close。

    item表示集合中每一个元素进行迭代时的别名,

    index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

    open表示该语句以什么开始,

    separator表示在每次进行迭代之间以什么符号作为分隔符,

    close表示以什么结束,

    collection属性是在使用foreach的时候最关键的也是最容易出错的,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况: 

    (1)如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .

    (2)如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .

    (3)如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

    二、获取最新的插入记录id

    <selectKey resultType ="Long" keyProperty= "id" order= "AFTER">
         SELECT LAST_INSERT_ID()
    </selectKey >

    三、示例

    <insert id="batchInsert" parameterType="List">
            <selectKey resultType ="Long" keyProperty= "id" order= "AFTER">
                SELECT LAST_INSERT_ID()
            </selectKey >
            INSERT INTO tb_payment_record
            <trim prefix = "(" suffix=")" suffixOverrides=",">
                buyer_id,
                seller_id,
                payment_amount,
                status,
                payment_integral,
                trade_id,
                extra,
                payment_time,
            </trim>
            VALUES
            <foreach collection="list" index="index" item="paymentRecord" separator=",">
                (
                #{paymentRecord.buyerId, jdbcType=BIGINT},
                #{paymentRecord.sellerId, jdbcType=BIGINT},
                #{paymentRecord.paymentAmount, jdbcType=DECIMAL},
                #{paymentRecord.status, jdbcType=INTEGER},
                #{paymentRecord.paymentIntegral, jdbcType=DECIMAL},
                #{paymentRecord.tradeId, jdbcType=BIGINT},
                #{paymentRecord.extra, jdbcType=VARCHAR},
                now()
                )
            </foreach>
        </insert>
  • 相关阅读:
    C++ 将对象写入文件 并读取
    IronPython fail to add reference to WebDriver.dll
    How to Capture and Decrypt Lync Server 2010 TLS Traffic Using Microsoft Tools
    .net code injection
    数学系学生应该知道的十个学术网站
    Difference Between Currency Swap and FX Swap
    Swift开源parser
    谈谈我对证券公司一些部门的理解(前、中、后台)[z]
    JDK8记FullGC时候Metaspace内存不会被垃圾回收
    JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/9278850.html
Copyright © 2011-2022 走看看