MyBatis批量插入

一、在MySQL数据库中

        在mysql数据库中,使用的是foreach标签。 foreach元素的属性主要有 collection,item,index,open,separator,close。

        常用的有

        item ,是临时的元素的代表。迭代的时候要用上它,很容易被忽略从而报错。

        collection标签是集合的代表。如果传入的值是List集合,那么collection的值是list。如果传入的是数组,那么collection的值是array。如果在接口上定义了传递进来的参数,那么collection的值就是那么定义好的参数,比如下面的tags。

public interface ArticleMapper ... 

        int insertArticleTag(@Param("tags")List<Tag> tags);

        index表示迭代的位置。

        open表示从什么地方开始,close表示什么地方结束

        separator表示在每次进行迭代之间以什么符号作为分隔符。MySQL中通常是",",Oracle中有时写union。

        插入实例。INSERT INTO t_tag(name,articleId) VALUES('good','22') , ('nice','22'),('perfect','22')

INSERT INTO temp7(name) VALUES('a'),('B'),('C')
<insert id="insertList" keyProperty="id" useGeneratedKeys="true" 
                                          parameterType="java.util.List">
        INSERT INTO t_tag(name,articleId)
        VALUES
        <foreach collection="list"  item="tag" separator="," index="index">
            (#{tag.name},#{tag.articleId})
        </foreach>
    </insert>

    注意:这里需要使用tag.name,我第一次写的时候,忘记了加上item中定义的临时属性,导致出错。   

二、Oracle数据库

         MySQL写法,转成Oracle。

<insert id="insert" parameterType="java.util.List" databaseId="oracle">
        INSERT INTO T_REGION
        (
        ID,
        GRADE,
        COLLEGE_CODE,
        TYPE,
        MAX,
        GMT_CREATE
        )
        SELECT 序列.NEXTVAL ID, A.*
        FROM(
        <foreach collection="list" item="entity" index="index" separator="UNION ALL">
            SELECT
            #{entity.grade} GRADE,
            #{entity.collegeCode} COLLEGE_CODE,
            1 TYPE,
            #{entity.maxProjectCredit} MAX,
            sysdate GMT_CREATE
            FROM dual
        </foreach>
        )A
    </insert>


 <insert id="insert" keyColumn="ID" keyProperty="id"
            parameterType="java.util.List" useGeneratedKeys="true" databaseId="mysql">
        INSERT INTO t_region (
        grade,
        college_code,
        type,
        max,
        gmt_create
        )
        VALUES
        <!-- Auto Generated by @PATIENT -->
        <foreach collection="list" item="entity" separator="," index="index">
            (
            #{entity.grade},
            #{entity.collegeCode},
            2,
            #{entity.max},
            now()
            )
        </foreach>
    </insert>

更多MyBatis使用经验

         MyBaits操作经验目录贴

posted @ 2022-07-17 12:16  小大宇  阅读(53)  评论(0编辑  收藏  举报