MyBatis批量修改-Oracel

MyBatis批量修改

再利用MyBatis操作Oracle实现批量的修改操做的时候,需要用到存储过程的知识点
批量修改,不同于批量的插入,批量修改可以同时操作不同表,但是如何保证他们是在同一次的操作中,这里就要用到存储过程。
两个关键字

  • Begin
  • ends
begin
	update set student name='hehe',age=21 where id = 101;
	update set dept dept_no=101,dept_name = '销售部' where dept_no = 102;
end

从这里看出,这里是两句的SQL语句,操作的不同的数据库表,但是这里保证了在同一次事务操作中完成。
所以有了上述的思路后,我们可以通过<foreach>标签来循环遍历参数列表,完成多条update语句的插入,从而实现批量修改

<!-- 批量修改 -->
<update id="updateByBatch" >
        <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
            update student
            <set>
                <if test="item.name != null">
                    NAME = #{item.name},
                </if>
                <if test="item.email != null">
                    email = #{item.email},
                </if>
                <if test="item.age !=null">
                    AGE = #{item.age},
                </if>
            </set>
            where ID = #{item.id}
        </foreach>
 </update>

在这里插入图片描述

这里又有一个比较有意思的地方给,管擦返回值,是-1.没想到吧

说明一下MyBatis的批量修改返回值是-1,这是由mybatis的defaultExExecutorType引起的
按照正常的JDBC原理来说,这里的DML操作后,返回的int值本应该代表的是修改的行数,但是这里却不同。
这里的defaultExEcutorType的类型有三个执行器,分别如下所示:

  • SIMPLE 就是普通的执行器;
  • REUSE 执行器会重用预处理语句(prepared statements);
  • BATCH 执行器将重用语句并执行批量更新。

BATCH可以批量更新操作,缓存SQL以提高性能,缺陷就是无法获取update、delete返回的行数。

看到这儿里,我们就可以基本理解了,采用的是缓存的机制来提高效率,所以获取不到影响的行数。

如果要拿到更新条数,修改如下:

在mybatis-config.xml配置:

<configuration>
    <settings>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="defaultExecutorType" value="BATCH"/>
    </settings>
</configuration>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@WAT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值