Mybaits批量插入List集合,修改List集合

1. mysql中插入List集合

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

item ,这个是迭代的每一个元素的代表,迭代的时候要用上它,不然很容易被忽略,从而报错。

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

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 id="insertArticleTag" 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中定义的临时属性,导致出错。

查询实例:

<select id="getRecommandArtice" resultType="com.ssi.domains.article.entity.Article">
        SELECT * from t_article
        WHERE id in
        <foreach collection="list" item="articleId" open="(" close=")" separator=",">
            #{articleId}
        </foreach>
    </select>

分隔符分割每个<foreach>标签的标签体 WHERE id in ( item1 , item2 ,item3 )

删除实例与插入实例大同小异。比如 delete from t_tag where id in (58,59)

2. Oracle中批量插入List集合

RelationMapping中有两个字段,分别是 currentId , mappingId 。当前的ID 映射多个 映射ID

Boolean InsertUserToRole(@Param("list") final List<RelationMapping> list);
 
<!--批量操作list集合 -->
<insert id="InsertUserToRole">
        insert into table
        (User_ID,ROLE_ID)
        (
        <foreach collection="list" close="" separator="union all" item="item" >
            select #{item.currentId},#{item.mappingId} from dual
        </foreach>
        )
    </insert>

在Oracle的版本中,有几点需要注意的

    1.SQL中没有VALUES;  看上述的配置文件,确实没有像mysql中的values

    2.<foreach>标签中的(selece ..... from dual);        值非要从dual中,明明是自己指定的,或许是oracle的形式主义

    3.<foreach>标签中的separator的属性为"UNION ALL",将查询合并结果集。    mysql中用逗号隔开

方法名:

Boolean questionnaireMappingReceiveGroup(@Param("list") 
                                  List<QuestionnaireMappingGroupEntity> mappingGroupEntities);

Oracle如何提交带主键的例子:ID从序列中获取

<insert id="questionnaireMappingReceiveGroup" parameterType="java.util.List">
    INSERT INTO T_QMR_QUESTIONNAIRE_GROUP
    (ID,QUESTIONNAIRE_ID, RECEIVER_GROUP_ID, CREATE_DATE, CREATE_USER_ID, UPDATE_DATE,UPDATE_USER_ID)
    SELECT SEQ_T_QMR.NEXTVAL ID, A.*
    FROM(
    <foreach collection="list" item="item" index="index" separator="UNION ALL">
        SELECT
        #{item.questionnaireId} QUESTIONNAIRE_ID,
        #{item.groupId} RECEIVER_GROUP_ID,
        sysdate CREATE_DATE,
        '1' CREATE_USER_ID,
        sysdate UPDATE_DATE,
        '1' UPDATE_USER_ID
        FROM dual
    </foreach>
    )A
</insert>

3. 使用Mybatis在Oracle数据库中批量更新

在Oracle数据库中批量更新。需要传递一个List集合,然户进行循环执行SQL语句

如果操作成功,返回值为 Integer 类型的 -1

语法如下:

<update id="updateList" parameterType="List">
        <foreach item="item" collection="list" index="index" open="begin" close=";end;" separator=";">
            UPDATE T_TABLE SET
            A= #{item.a},
            B= #{item.b},
            C= #{item.c},
            D= sysdate
            where ID = #{item.id}
        </foreach>
    </update>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值