首页 > 其他分享 >MyBatis批量修改-Oracel

MyBatis批量修改-Oracel

时间:2022-09-30 11:05:46浏览次数:48  
标签:执行器 批量 item Oracel update dept 修改 MyBatis


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>

MyBatis批量修改-Oracel_批量更新

这里又有一个比较有意思的地方给,管擦返回值,是-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>


标签:执行器,批量,item,Oracel,update,dept,修改,MyBatis
From: https://blog.51cto.com/u_14957231/5725622

相关文章

  • MyBatis-Plus 条件查询器
    MyBatis-Plus剩余内容​​本篇的主要代码依赖于之前的通用Mapper和通用Service篇​​前两个星期忙着转正的事情,比较忙。所以快两个周每太更新博客,这周末抓紧时间把剩余的MP......
  • SpringBoot之Mybatis开启SQL记录和Pagehelper
    配置mybatismybatis:#mapper路径mapper-locations:classpath:mapper/*.xmlconfiguration:#日志输出log-impl:org.apache.ibatis.logging.stdout.StdO......
  • MyBatis
    1.概念Mybatis是一款半ORM(对象关系映射)的持久层框架,支持定制化SQL、存储过程以及高级映射。避免了几乎所有的JDBC代码和手动设置参数及获取结果集。可以使用注解或......
  • Mybatis学习
    什么是Mybatis?看官网的定义:MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的......
  • Mybatis(2022-09-29)
    SSMSpringMVC+Spring+Mybatis3SpringMVC:充当的就是Servlet的角色。可以理解为SpringMVC是Spring的WEB支持。1Mybatis:充当的就是Dao层。2Spring:充当的时一个润滑油......
  • springboot+mybatis 双数据源配置
    maven依赖spring-boot-starter-webmybatis-spring-boot-startermysql-connector-javalombokapplication.ymlserver:port:8080#启动端口spring:datasource:......
  • 05. MyBatis缓存
    一、MyBatis的一级缓存  一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问。  ......
  • mybatis 参数为String,用_parameter 取值
    mybatis参数为String,iftest读取该参数代码:<selectid="getMaxDepartId"parameterType="java.lang.String"resultType="java.lang.String">SELECTMAX(DEPART_ID......
  • mybatis中大于等于小于等于的写法
    第一种写法(1):原符号<<=>>=&'"替换符号<<=>>=&amp;&apos;"例如:sql如下:create_date_time>=#{startTime}andcreate_date_time<=#{endTime} 第二种写法......
  • MyBatisPlus入门
    1、MyBatisPlus简介MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率。官网:https://mybatis.plus/  https://mp.baomidou.com/1.1、......