Mybatis 不是有 SqlSessionManager 了吗?为什么有提供了SqlSessionTemplate?

JAVA herman 628浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

通过前面我的这篇文章《MyBatis 中 SqlSession 是线程安全的吗?》多数人看完都说,喜欢看!但是我在群里提问了一个问题,Mybatis 不是有 SqlSessionManager 了吗?为什么又提供了SqlSessionTemplate?

然而,多数人都答不上来。看来多思考还是少数人才喜欢生活方式。

那么本文就说一说,Mybatis 中有一个线程不安全的 DefaultSqlSession,和一个线程安全的 SqlSessionManager。通过它们都可以获取到 SqlSession,哪为什么有设计了一个 SqlSessionTemplate 呢?SqlSessionTemplate 是不是没有存在的必要?

其实这个答案啊,我在《MyBatis 中 SqlSession 是线程安全的吗?》文章中已经总结过了,现在再把重点内容截图如下:

SqlSessionManager 与 SqlSessionTemplate 的区别

上面其实只解释了一部分。那就是 SqlSessionManager 是由调用者决定是否共用 SqlSession 的。而 SqlSessionTemplate 是 MyBatis 专门为 Spring 提供的,支持 Spring 框架的一个 SqlSession 获取接口。主要是为了继承 Spring,并同时将是否共用 SqlSession 的权限交给 Spring 去管理。

这一点,我们通过它们所在包的命令也可以看出来。org.mybatis.spring.SqlSessionTemplate 一看包名就知道,它是为嫁接 Spring 而提供的。并且它实现了 Spring 的 DisposableBean 接口。

SqlSessionManager 是适合在不整合 Spring 框架的时候使用。并且是在一开始,2009 年就推出了这个类。但是自从有了 Spring,配合 Spring 以后,SqlSessionTemplate 类就逐渐取代了 SqlSessionManager。

大家在使用 MyBatis 时,基本上都是会和 Spring 进行继承的。因此 SqlSessionManager 基本上被抛弃,目前各个开源项目中基本上都没有见到 SqlSessionManager 的身影。为了和 Spring 能够更好的整合,因此,我们都是用 SqlSessionTemplate 来获取 SqlSession。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » Mybatis 不是有 SqlSessionManager 了吗?为什么有提供了SqlSessionTemplate?