Mybatis的批处理以及执行Update返回行数为负数

您所在的位置:网站首页 mybatis批量执行器 Mybatis的批处理以及执行Update返回行数为负数

Mybatis的批处理以及执行Update返回行数为负数

2023-11-03 04:02| 来源: 网络整理| 查看: 265

  项目中用到了批量更新。

在开发当中,可能经常会遇到批量处理这种情况,一般都再在java层面进行, 其本质是节省数据库连接打开关闭的的次数,占用更少的运行内存。

  下面先记一下批处理映射吧:

  mybatis批量插入   1 2 3 SELECT 4 LAST_INSERT_ID() 5 6 INSERT INTO t_product_fee_rule( 7 8 ) 9 VALUES 10 11 ( 12 #{item.id},#{item.productId}, 13 #{item.feeCode},#{item.feeValue}, 14 #{item.remarks} 15 ) 16 17

 

  mybatis批量删除   

1 2 3 DELETE FROM t_product_agent 4 WHERE 1 = 1 5 AND product_id = #{maps.productId} 6 AND agent_id = #{item} 7 8

  此处的maps接口中的@Param值对应,属于自定义变量。  

void removeProductAgent(@Param("maps")Map map);

 

 

  mybatis批量更新

1 2 begin 3 5 UPDATE PROCESS_NODE 6 SET 7 DURATION = (#{item.duration}*3600) 8 WHERE NODE_ID = #{item.nodeId} 9 AND PROCESS_TEMPLATE_ID = #{item.processTemplateId} 10 ; 11 end; 12

 

  说说遇到到问题:

  获取mybatis的update行数,总是返回负数。后来在官网上找到原因,是由于defaultExecutorType的引起的,defaultExecutorType有三个执行器SIMPLE、REUSE和BATCH。其中BATCH可以批量更新操作缓存SQL以提高性能,但是有个缺陷就是无法获取update、delete返回的行数。defaultExecutorType的默认执行器是SIMPLE。

名称描述SIMPLE执行器执行其它语句REUSE可能重复使用prepared statements 语句BATCH可以重复执行语句和批量更新

    

 

 

 

    由于项目配置中启用了BATCH执行器,UPDATE和DELETE返回的行数就丢失了,把执行器改为SIMPLE即可。

    

1 2 DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

 

  其实这个在我的项目中是没效果的,应该以后会有用吧,先记下来。

  我的项目目前没找到好的解决办法,只能用try..catch来解决了,=.=|

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3