【12.MyBatis源码剖析与架构实战】2.SqlSession源码剖析

张开发
2026/5/20 9:51:48 15 分钟阅读
【12.MyBatis源码剖析与架构实战】2.SqlSession源码剖析
MyBatis SqlSession 源码深度剖析SqlSession是 MyBatis 中最重要的接口之一,它定义了数据库会话的基本操作:执行 SQL、获取 Mapper 代理、事务控制等。本文将结合源码,深入剖析SqlSession的创建、内部实现、核心方法以及其与Executor、Configuration等组件的协作关系。一、SqlSession 接口定义publicinterfaceSqlSessionextendsCloseable{// 泛型查询方法:返回单个对象TTselectOne(Stringstatement);TTselectOne(Stringstatement,Objectparameter);// 查询列表EListEselectList(Stringstatement);EListEselectList(Stringstatement,Objectparameter);EListEselectList(Stringstatement,Objectparameter,RowBoundsrowBounds);// 查询并存入 MapK,VMapK,VselectMap(Stringstatement,StringmapKey);K,VMapK,VselectMap(Stringstatement,Objectparameter,StringmapKey);K,VMapK,VselectMap(Stringstatement,Objectparameter,StringmapKey,RowBoundsrowBounds);// 游标查询(大数据量)CextendsCursorTCselectCursor(Stringstatement);CextendsCursorTCselectCursor(Stringstatement,Objectparameter);CextendsCursorTCselectCursor(Stringstatement,Objectparameter,RowBoundsrowBounds);// 带结果处理器(自定义处理每行数据)voidselect(Stringstatement,Objectparameter,ResultHandlerhandler);voidselect(Stringstatement,ResultHandlerhandler);voidselect(Stringstatement,Objectparameter,RowBoundsrowBounds,ResultHandlerhandler);// 增删改intinsert(Stringstatement);intinsert(Stringstatement,Objectparameter);intupdate(Stringstatement);intupdate(Stringstatement,Objectparameter);intdelete(Stringstatement);intdelete(Stringstatement,Objectparameter);// 事务控制voidcommit();voidcommit(booleanforce);voidrollback();voidrollback(booleanforce);// 获取 Mapper 动态代理对象TTgetMapper(ClassTtype);// 获取当前会话的配置ConfigurationgetConfiguration();// 获取连接ConnectiongetConnection();// 清空本地缓存(一级缓存)voidclearCache();// 关闭会话voidclose();}可以看出,SqlSession封装了几乎所有数据库交互的基础方法,是 MyBatis 面向开发者提供的最直接的 API。二、SqlSession 的创建过程SqlSession由SqlSessionFactory创建,通常使用DefaultSqlSessionFactory实现。2.1 SqlSessionFactory.openSession()// DefaultSqlSessionFactory.java@OverridepublicSqlSessionopenSession(){returnopenSessionFromDataSource(configuration.getDefaultExecutorType(),null,false);}privateSqlSessionopenSessionFromDataSource(ExecutorTypeexecType,TransactionIsolationLevel

更多文章