关于 sqlsession的关闭问题

1.sqlsession.close实际上执行了 conn.close

	1.sqlsession.close即会关闭sqlSession,也会执行conn.close
	2.如果使用连接池,那么conn.close只代表,将连接归还给连接池,不代表连接关闭
	3.如果没有使用连接池,那么sqlSession.close代表执行conn.close代表关闭连接

2.spring整合mybatis,为什么不用手动执行sqlsession.close

	1.spring一般生成SqlSessionTemplate用来实现SqlSession接口,它里面有一个sqlSessionProxy
	每次sqlSessionTemplate执行操作,都是调用的proxy,进入invoke方法,会根据是否是事务,获取新的sqlSession然后执行真正的目标方法,
	最后执行完,调用sqlSession.close,关闭这个获取的sqlSession,而sqlSessionTemplate和其里面的sqlSessionProxy是没有被关闭的,这都是动态代理的体现
	
	2.相当于我们执行完一个 @translation,invoke方法里面 新创建的sqlsession会自动执行close
	是通过动态代理方式完成 connection连接的关闭.而且是通过jdk的代理.

3.总结

	1.一般我们都使用了连接池技术
	2.sqlSession.close实际上执行了,conn.close
	3.conn.close要分是否使用连接池技术来看是否关闭连接
	4.spring默认不用执行sqlsession.close,它通过动态代理来完成的执行了sqlSession.close
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值