在测试接口过程中,新增和修改数据库中数据时,返回的结果是-2147482646,给我的第一印象是返回的int的最小值,因为自己曾经解决被除数为0时,程序运行不报错写过一段代码:
public class Test {
public static void main(String[] args) {
System.err.println(div(5,0));
}public static int div(int a,int b){
return (int)(a/(float)b);
}
}
这样程序是不报错的,但是返回的是2147483647,int的最大值,没什么意义。但是在测试中确实已经修改或者新增了数据,但是返回值就是-2147482646,并不是返回的受影响的行数,所以开始百度查找问题原因所在。最后找到原因是:在配置文件中
<!-- 配置一个可以执行批量的sqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
<constructor-arg name="executorType" value="BATCH"></constructor-arg>
</bean>
蓝色标注的value="BATCH" 更改为 value="SIMPLE" 问题就可以解决,但是还有疑问缠绕在心头这是为什么呢?
接下来开始查看源码首先从value="SIMPLE"下手,进去之后看到
package org.apache.ibatis.session; public enum ExecutorType { SIMPLE, REUSE, BATCH; private ExecutorType() { } }
只是一个枚举,并没有实际意义,到底是哪里出现问题了? 那么开始寻找constructor-arg name="executorType",这个spring的bean通过构造器注入的executorType,但是能力有限,把自己绕晕了,最后在这篇博客中找到了答案,要是想看详细的源码追踪过程,可以直接去:http://www.cnblogs.com/wyq178/p/8652443.html。