关于使用mybatis向数据库中插入数据放回值为-2147482646的问题解析

    首先,我们先看下这个返回值-2147482646,这时int的最大值进行+1操作后的值,估计大家都已经知道造成这种结果的原因是再为mybatis配置相关属性时将defaultExecutorType设为BATCH的缘故.

那为什么这么配置会返回这个值呢?大家跟我一块去看看源码吧.

     开门见山,先让大家看下我的mybatis.xml配置

大家请忽略,涂鸦部分(嘻嘻...重点放在框住部分)

    第一,既然对数据的操作都要经过SqlSession来完成,那SqlSession又是哪来的呢?不啰嗦上源码.

由图可以看出,在设置SqlSessionFactory的时候新建的SqlSessionTemplate模板,SqlSessionTemplate是不是有点面熟?

对了就是我们在配置文件中的配置的SqlSessionTemplate.而且能从第一张图片中看到我们的defaultExecutorType就设为BATCH.

默认的就是BATCH.

那么我们现在获得到SqlSession后进行一次插入操作:

getSqlSession().insert("CustomerMailMapper.addMailInfo",mail);

那我们看源码SqlSession接口中对应的方法

接着去看实现类中的方法实现

可以看出,还是调用的他本身的update方法,那怎么办?接着看嘛...

终于让我们看到返回值的出处了,但这就完了么?还没有可以看出调用了自己的executor属性的update属性.

这Executor也是接口,那我们之间看他的实现类

有这几种,根据我们的配置当然会是执行BatchExecutor,但是当我们进到BatchExecutor是会发现他并没有update方法,那在哪呢?

原来他继承了BaseExecutor这个抽象类,BaseExecutor里有update方法.

可以看出这里返回的值是调用的本身的doUpdate方法,是不是感觉真相距离我们越来越近了,可以剧透下你的直觉是对的.来上图

看到我画的重点没,可以看出这个方法不管你的逻辑是怎么实现的直接给你返回了-2147482646.真是千呼万唤始出来啊.所以如果大家需要在向数据库插入数据时的返回值就把Batch给改掉,而这个值都可以设置那些呢?

Batch就是指的SqlSessionTemplate中的ExecutorType这个属性,而这个属性是个枚举类

只有是那种,所以你想要怎样,百度下这三种配置所对应的情况就行了.

(拜拜...)

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值