Mybatis执行Update返回行数为负数
来源:互联网 发布:java项目获取src路径 编辑:程序博客网 时间:2024/05/19 20:38
获取mybatis的update行数,总是返回负数。后来在官网上找到原因,是由于defaultExecutorType的引起的,defaultExecutorType有三个执行器SIMPLE、REUSE和BATCH。其中BATCH可以批量更新操作缓存SQL以提高性能,但是有个缺陷就是无法获取update、delete返回的行数。defaultExecutorType的默认执行器是SIMPLE。
名称 描述
由于项目配置中启用了BATCH执行器,UPDATE和DELETE返回的行数就丢失了,把执行器改为SIMPLE即可。
通过查看源码可以发现,batch执行器返回的是最大批量执行条数:
public static final int BATCH_UPDATE_RETURN_VALUE = Integer.MIN_VALUE + 1002;public int doUpdate(MappedStatement ms, Object parameterObject) throws SQLException { final Configuration configuration = ms.getConfiguration(); final StatementHandler handler = configuration.newStatementHandler(this, ms, parameterObject, RowBounds.DEFAULT, null, null); final BoundSql boundSql = handler.getBoundSql(); final String sql = boundSql.getSql(); final Statement stmt; if (sql.equals(currentSql) && ms.equals(currentStatement)) { int last = statementList.size() - 1; stmt = statementList.get(last); BatchResult batchResult = batchResultList.get(last); batchResult.addParameterObject(parameterObject); } else { Connection connection = getConnection(ms.getStatementLog()); stmt = handler.prepare(connection); currentSql = sql; currentStatement = ms; statementList.add(stmt); batchResultList.add(new BatchResult(ms, sql, parameterObject)); } handler.parameterize(stmt); handler.batch(stmt); return BATCH_UPDATE_RETURN_VALUE; }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <settings> <!-- 全局映射器启用缓存 --> <setting name="cacheEnabled" value="true" /> <!-- 查询时,关闭关联对象即时加载以提高性能 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 --> <setting name="aggressiveLazyLoading" value="false" /> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 允许使用列标签代替列名 --> <setting name="useColumnLabel" value="true" /> <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --> <setting name="useGeneratedKeys" value="true" /> <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> <setting name="autoMappingBehavior" value="FULL" /> <!-- 对于批量更新操作缓存SQL以提高性能 --> <!-- defaultExecutorType设置为BATCH有个缺陷就是无法获取update、delete返回的行数 --> <!-- <setting name="defaultExecutorType" value="BATCH" />--> <!-- 数据库超过25000秒仍未响应则超时 --> <setting name="defaultStatementTimeout" value="25000" /> <!-- 日志 --> <!-- <setting name="logImpl" value="SLF4J"/> --> </settings> <!-- 注册mybatis插件 --> <plugins> <!-- mysql分页插件 --> <plugin interceptor="com.rvho.mybatis.interceptor.MybatisPageInterceptor"> <property name="databaseType" value="mysql"/> </plugin> </plugins></configuration>
0 0
- Mybatis执行Update返回行数为负数
- Mybatis执行Update返回行数为负数
- Mybatis执行Update返回行数为负数
- mybatis返回多行数据
- Mybatis selectOne方法执行sql有数据返回为null
- mybatis执行批量更新update
- mybatis执行批量更新update
- mybatis中update执行多次
- 关于binarySearch返回值为负数
- 返回UPDATE SQL语句所影响的行数的方法
- 浅谈SQL Update返回影响行数的意义
- Java MyBatis 插入数据库返回主键 总返回行数
- Mybatis中insert、Update操作返回主键
- mybatis批量执行mysql的update操作
- mybatis执行update批量更新时报错
- Java 程序中执行update返回结果
- kohana返回db影响的行数,mysql影响的行数(delete,update)
- PHP函数ip2long()返回值为负数的解决办法
- 记忆化搜索
- CodeForces 677B Vanya and Food Processor(打土豆,模拟)
- Mysql之校对集问题
- jzoj 1348. 【2011.12.17普及模拟】越野跑
- tjut 2865
- Mybatis执行Update返回行数为负数
- vim之vim基础知识
- jsp之javaweb在学习
- HDU-5671 Matrix
- 动态建树之——查字典
- 论黄金分割的设计使用
- 谈谈缓存更新的套路
- Delegate的BeginInvoke()
- C++ hdoj 2032 杨辉三角