细究MyBaties中SqlSession使用之后为什么需要close

本文探讨了MyBatis中SqlSession使用后为何需要调用close方法,尽管SqlSessionFactory类似数据库连接池,负责管理数据库连接。不同于线程池能自动回收线程,数据库连接池无法感知单个连接何时使用完毕,因此需要程序员显式调用SqlSession的close方法进行回收,以通知连接池连接已可用。SqlSession的close并非关闭连接,而是将其归还到连接池。
摘要由CSDN通过智能技术生成

细究MyBaties中SqlSession使用之后为什么需要close

在Mybatis文档中有这样一句话
打开一个 SqlSession,返回一个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。
Mybatis文档

可是我们知道SqlSessionFactory相当于一个数据库连接池,而由SqlSessionFactory得到的SqlSession则相当于一条数据库连接.

而在我们学习线程池时,我们明白线程池中线程的寿命是由线程池本身进行调控的,我们申请一个线程之后只管用就好了,线程池自己会在最合适的时候去释放掉这个线程.从而避免频繁申请和销毁线程.

数据库连接池的原理与线程池原理类似,那为什么一个需要即使去释放一个不需要呢?

这主要是因为我们在编写线程池代码时,我们可以’感知’被使用的线程何时该被回收(任务完成时被回收),而一条连接何时被使用完毕作为数据库连接池是无法’感知’的,所以当我们使用完一条连接后我们需要告知数据库连接池我们已使用完毕,可以进行回收了,而告知的操作就是close.也就是说SqlSession的close并不是将连接关闭,而是将Sqlsession回收进数据库连接池即SqlSessionFactory

完毕

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis使用SqlSession来执行数据库操作。SqlSession是MyBatis的核心接口,它提供了多种方法来执行SQL语句、提交事务、获取映射器等操作。 首先,你需要通过SqlSessionFactory来创建SqlSession对象。SqlSessionFactory是由MyBatis配置文件和映射文件构建而成的,它负责创建SqlSession对象。 下面是使用SqlSessionFactory创建SqlSession的代码示例: ```java String resource = "mybatis-config.xml"; // MyBatis配置文件的路径 InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); ``` 一旦你获得了SqlSession对象,你就可以使用它来执行各种数据库操作。以下是一些常用的SqlSession方法: - `selectOne(String statement, Object parameter)`:查询单条记录。 - `selectList(String statement, Object parameter)`:查询多条记录。 - `insert(String statement, Object parameter)`:插入数据。 - `update(String statement, Object parameter)`:更新数据。 - `delete(String statement, Object parameter)`:删除数据。 - `commit()`:提交事务。 - `rollback()`:回滚事务。 其,`statement`参数是映射文件定义的SQL语句的唯一标识,`parameter`参数是传递给SQL语句的参数。 使用SqlSession后,记得关闭它以释放资源: ```java sqlSession.close(); ``` 这就是MyBatis使用SqlSession进行数据库操作的基本流程。希望能对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值