Mybatis的批处理以及执行Update返回行数为负数 |
您所在的位置:网站首页 › mybatis批量执行器 › Mybatis的批处理以及执行Update返回行数为负数 |
项目中用到了批量更新。 在开发当中,可能经常会遇到批量处理这种情况,一般都再在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 |