全局唯一

全局唯一

如果我们在多个类中调用了

MybatisUtils.openSession();

方法,实现的是多个sqlsession对象吧, 但是每个不同的sqlsession对象都是由mybatisUtils类中的

SqlSessionFactory对象创建的;所以SqlSessionFactory对象是唯一的,但是多个的,对吧。也就是数据库连接。

为什么一定要保证

SqlSessionFactory

对象是唯一的呢,是因为只加载一次数据库的配置文件就可以了吧,加载多次没有意义。影响运行吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-04-25 17:18:34

同学你好,1、SqlSessionFactory对象应该是全局中唯一的,并不建议创建多个。

2、是的,会影响运行,如果SqlSessionFactory对象在全局中不唯一,那么每次使用都需要创建一个对象,会造成内存浪费,严重时会造成内存溢出;所以这里SqlSessionFactory对象应在全局中唯一。

祝学习愉快!

  • 提问者 rock221 #1

    老师,如果我们在多个方法中调用了mybatisUtils.openSession()时,那么就会创建多个session链接了。我们在数据库配置的时候设置连接池默认初始化数量是5个,那么在每次调用mybatisUtils.openSession()时,都会默认创建5个连接吗?还是无论调用多少次mybatisUtils.openSession(),创建的链接一共只有5个。 sqlsession只是获取了1个链接。 



    2021-04-28 13:35:24
  • 提问者 rock221 #2

    连接池的链接数量设置,应该是在SqlSessionFactory对象加载xml的时候都创建好了吧,如果是默认5个,那么就是5个,当我们每次调用sqlsession链接的时候,会给我们1个链接,如果并发情况,5个人一起使用sqlsession链接查询操作的时候,会给我们5个链接。对吧。所以就是说,连接池的数量实在加载xml的时候就已经创建出来了。 对吗

    2021-04-28 13:43:48
  • 好帮手慕小尤 回复 提问者 rock221 #3

    ​同学你好,1、根据在mybatis-config.xml中的配置连接池只会创建5个链接,在多次调用mybatisUtils.openSession()时,sqlsession会根据请求获取其中1个链接进行操作。

    2、数据库连接池是在程序(项目)启动时创建的数据库连接,会根据mybatis-config.xml中的配置默认创建5个连接。并不是在SqlSessionFactory对象加载xml的时候创建的。

    祝学习愉快!

    2021-04-28 15:48:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师