mybatis 批量增加、删除、修改、查询

这里运用的是Mysql的数据库.

1、批量增加。一般的批量插入.首先,先写出批量插入的原SQL

insert into table(field1,field2,field3) values ('aa','bb','cc'), ('dd','ee','ff')

所以可以运用Mybatis中的foreach来进行进行如上操作,只需要将循环的语句进行替换即可

<insert id="batchAddRoleMenu" parameterType="java.util.List">
        INSERT INTO  table(
            field1,

            field2,

            field3)       

            VALUES

            <foreach collection="list" item="item" index="index" separator=","  open="(" ,close=")">
                #{item.field1},#{item.field2},#{item.field3}
            </foreach>

    </insert>

2、批量删除.

一般的情况就是对多个Id进行删除,同样先写出sql语句

delete from table where id in (1,2,3).

所以只需要将需要循环的地方进行foreach替换即可。

<delete id="batchAddRoleMenu" parameterType="java.util.List">     

            DELETE FROM table

            WHERE id IN

            <foreach collection="list" item="item" index="index" separator="," ,open="(",close=")">
                 #{item.id}
            </foreach>

           

    </delete>

注意括号括循环语句外面。

3、批量修改,一种情况是指需要修改多个对象的一个值,另外一种是修改多个对象的多个值.

a.修改多个对象的一个值.先写出sql

update table set field = 0 where id in (1,2,3);

情况同上,foreach替换循环.

<update id="batchAddRoleMenu" parameterType="java.util.List">     

            UPDATE  table

            SET field = 0

            WHERE id IN

            <foreach collection="list" item="item" index="index" separator="," open="(",close=")" >
                 #{item.id}
            </foreach>

           

    </update>

b.修改多个对象的多个值.各个值不相同. 一个想法能否用循环来操作多个语句如下。

update table set field = 1,field2 = 2 where id = 1;

update table set field = 2,field2 = 3 where id = 2;

很遗憾,mybatis 不支持如上.

所以想另外一种情况,利用mysql 中的 case when then 来进行改写.先写出sql语句

update table

set field =

case id  when 1 then 1

when 2 then 2

END

, field2 =

case id when 1 then 2

when 2 then 3

END

where id in (1,2)

将循环的地方进行替换即可.所以最终为

<update id="batchAddRoleMenu" parameterType="java.util.List">     

            UPDATE  table

            SET field =

            <foreach collection="list" item="item" index="index" separator=","  open="Case id" close="END" >
                 WHEN #{item.id} THEN #{item.field}
            </foreach>

           , field2 =

            <foreach collection="list" item="item" index="index" separator=","  open="Case id"  close="END">
                 WHEN #{item.id} THEN #{item.field2}
            </foreach>

           WHERE id IN

            <foreach collection="list" item="item" index="index" separator=","  open="(",close=")" >
                 #{item.id}
            </foreach>

    </update>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值