基本的SELECT语句生命周期

本文详细介绍了SQLServer处理客户端查询请求的过程,包括客户端与服务器端SNI建立连接、TDS消息解包、命令解析、查询优化及执行等关键步骤。
      (1) 客户端的SQL Server网络接口(SNI)通过一种网络协议,例如TCP/IP,与SQL Server服务器端的SNI建立了一个连接,然后通过TCP/IP连接和TDS端点创建一个连接,并通过这个连接向SQL Server以TDS消息的形式发送SELECT语句。

(2) SQL Server的SNI将TDS消息解包,读取SELECT语句,然后将这个SQL命令发送给命令解析器。

(3) 命令解析器在缓冲池的计划缓存中检查是否已经存在了一条与接收到的语句匹配且可用的查询计划。如果找不到,命令解析器则基于SELECT语句生成一个查询树,然后将查询树传递给查询优化器,让其生成查询计划。

(4) 由于这条查询命令非常简单,查询优化器仅在预优化阶段就生成了“零开销”的查询计划(或称为“普通”查询计划)。查询优化器将创建出来的查询计划发送给查询执行器执行。

(5) 查询执行器在执行查询计划的时候,首先确定完成这个查询计划需要读取什么数据,然后通过OLE DB接口向存储引擎中的访问方法发送访问数据请求。

(6) 为了完成查询执行器的请求,访问方法需要从数据库中读取一个数据页面,并要求缓冲区管理器提供这个数据页面。

(7) 缓冲区管理器在数据缓存中检查这个数据页面是否已经存在。由于这个页面并没有在数据缓存中,因此缓冲区管理器首先从磁盘上获取这个数据页面,然后将其存入缓存,并传回给访问方法。

(8) 最后,访问方法将结果集传递给关系引擎,由关系引擎将结果集发送给客户端。

转载于:https://www.cnblogs.com/faith123/p/3572802.html

### 回答1: Mybatis SqlSession的生命周期包括以下几个阶段: 1. 创建SqlSession对象:通过SqlSessionFactory工厂类的openSession()方法创建SqlSession对象。 2. 执行SQL语句:通过SqlSession对象的selectOne()、selectList()、insert()、update()、delete()等方法执行SQL语句。 3. 提交事务:通过SqlSession对象的commit()方法提交事务。 4. 回滚事务:通过SqlSession对象的rollback()方法回滚事务。 5. 关闭SqlSession对象:通过SqlSession对象的close()方法关闭SqlSession对象。 ### 回答2: Mybatis是一种优秀的ORM(对象关系映射)框架,它采用XML或注解的方式将SQL语句Java对象进行映射,从而实现Java对象与数据库表之间的操作。而在Mybatis中,SqlSession是一个重要的组成部分,它用于管理数据库会话和操作数据库。 SqlSession的生命周期可以分为以下三个阶段: 1.创建阶段:SqlSession的创建是由SqlSessionFactory进行管理的,SqlSessionFactory通过读取Mybatis配置文件和mapper文件,加载数据库驱动和数据库连接等信息,创建SqlSession实例。在创建SqlSession时,需要传入两个参数,一个是ExecutorType,表示SqlSession所使用的执行器类型,另一个是boolean类型的autoCommit参数,表示是否自动提交事务。 2.使用阶段:SqlSession的主要作用是操作数据库,包括对数据库的增删改查等操作。在使用SqlSession过程中,需要调用相应的方法,如selectOne、selectList、insert、update、delete等。在执行这些方法时,SqlSession会创建一个statement对象,通过statement对象与数据库进行交互,执行对应的SQL语句,并将结果封装为Java对象返回给调用方。 3.关闭阶段:当SqlSession不再需要使用时,应该及时关闭,避免占用连接资源。在SqlSession关闭时,会自动提交未提交的事务,并释放连接资源。SqlSession关闭的方式有两种,一种是手动关闭,调用SqlSession的close方法,另一种是通过try-with-resources语句自动关闭,如下所示: try (SqlSession sqlSession = sqlSessionFactory.openSession()) { // 调用SqlSession的方法进行数据库操作 } // 在try块结束时,SqlSession会自动关闭。 总之,在使用Mybatis进行数据库操作时,SqlSession的生命周期十分重要,需要合理管理SqlSession实例的创建、使用和关闭,避免因连接资源不足或未关闭导致的性能问题和内存泄漏等问题。 ### 回答3: Mybatis是一款流行的开源持久层框架,它通过SqlSession来提供对数据库的访问。SqlSession在Mybatis中扮演着重要的角色,可以理解为Mybatis框架的工作单元。 SqlSession的生命周期从创建到关闭,经历了三个阶段:初始化阶段、操作阶段和关闭阶段。 初始化阶段: SqlSession是通过SqlSessionFactory工厂类创建的,当我们获取SqlSession对象时,就会经过初始化阶段,这时会执行一些初始化工作,包括加载Mybatis的配置文件、创建数据库连接池等操作。 操作阶段: SqlSession对象创建完成后,在使用过程中,我们可以对数据库进行增、删、改、查等操作。每个操作都需要重新获取一个SqlSession对象。在操作阶段,SqlSession对数据库进行的操作都是在同一个数据库连接上实现的,因此操作的数据都是在同一个事务中的。如果在操作时发生了异常,SqlSession将会回滚之前的操作。在操作完成后,如果没有调用commit或rollback方法来结束事务,则 SqlSession会对错误进行回滚操作。 关闭阶段: 当SqlSession使用完后,需要调用close()方法来关闭它,同时释放它所占用的资源。SqlSession的关闭操作也会导致其所占用的数据库连接被关闭。如果在操作阶段中,事务没有结束,那么关闭SqlSession时,Mybatis会自动执行rollback操作。建议在访问数据库的操作结束后,尽早地关闭SqlSession对象,以释放资源。 总之,SqlSession是Mybatis框架的重要组成部分,它负责对数据库的访问操作。SqlSession有三个阶段:初始化、操作、关闭。用户需要在合适的时候关闭SqlSession,以释放资源、避免内存溢出等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值