news 2026/4/23 18:14:03

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【12.MyBatis源码剖析与架构实战】2.SqlSession源码剖析

MyBatis SqlSession 源码深度剖析

SqlSession是 MyBatis 中最重要的接口之一,它定义了数据库会话的基本操作:执行 SQL、获取 Mapper 代理、事务控制等。本文将结合源码,深入剖析SqlSession的创建、内部实现、核心方法以及其与ExecutorConfiguration等组件的协作关系。


一、SqlSession 接口定义

publicinterfaceSqlSessionextendsCloseable{// 泛型查询方法:返回单个对象<T>TselectOne(Stringstatement);<T>TselectOne(Stringstatement,Objectparameter);// 查询列表<E>List<E>selectList(Stringstatement);<E>List<E>selectList(Stringstatement,Objectparameter);<E>List<E>selectList(Stringstatement,Objectparameter,RowBoundsrowBounds);// 查询并存入 Map<K,V>Map<K,V>selectMap(Stringstatement,StringmapKey);<K,V>Map<K,V>selectMap(Stringstatement,Objectparameter,StringmapKey);<K,V>Map<K,V>selectMap(Stringstatement,Objectparameter,StringmapKey,RowBoundsrowBounds);// 游标查询(大数据量)<CextendsCursor<T>>CselectCursor(Stringstatement);<CextendsCursor<T>>CselectCursor(Stringstatement,Objectparameter);<CextendsCursor<T>>CselectCursor(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 动态代理对象<T>TgetMapper(Class<T>type);// 获取当前会话的配置ConfigurationgetConfiguration();// 获取连接ConnectiongetConnection();// 清空本地缓存(一级缓存)voidclearCache();// 关闭会话voidclose();}

可以看出,SqlSession封装了几乎所有数据库交互的基础方法,是 MyBatis 面向开发者提供的最直接的 API。


二、SqlSession 的创建过程

SqlSessionSqlSessionFactory创建,通常使用DefaultSqlSessionFactory实现。

2.1 SqlSessionFactory.openSession()

// DefaultSqlSessionFactory.java@OverridepublicSqlSessionopenSession(){returnopenSessionFromDataSource(configuration.getDefaultExecutorType(),null,false);}privateSqlSessionopenSessionFromDataSource(ExecutorTypeexecType,TransactionIsolationLevel
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 23:31:12

多邻国的AI实践:放弃KPI考核后,效率反而更高了?

先说结论强制AI考核可能适得其反&#xff1a;多邻国曾尝试将AI使用纳入KPI&#xff0c;但发现员工会陷入“为用而用”的形式主义&#xff0c;最终取消该政策&#xff0c;回归到以工作成果为核心。“热情驱动”比“指令驱动”更易出成果&#xff1a;公司内增长最快的课程由两名非…

作者头像 李华
网站建设 2026/4/21 23:27:09

【收藏备用|2026年版】程序员/小白必看:转行大模型,从0到1落地指南

自ChatGPT惊艳亮相、文心一言与通义千问等国产大模型相继迭代升级后&#xff0c;“投身大模型领域”已然成为职场圈、技术圈的顶流话题。无论是深耕代码的程序员、主导产品落地的产品经理、专注数据挖掘的分析师&#xff0c;还是负责品牌推广的市场人、统筹用户运营的专员&…

作者头像 李华
网站建设 2026/4/21 23:26:35

EF Core 10向量扩展实战指南:3大金融级场景(智能投研问答、多模态合同比对、实时反欺诈)零代码改造落地路径

第一章&#xff1a;EF Core 10向量搜索扩展的演进逻辑与金融级能力边界EF Core 10 向量搜索扩展并非孤立的功能叠加&#xff0c;而是对金融场景中低延迟语义检索、多模态风险特征对齐、以及合规性向量审计等刚性需求的系统性响应。其演进路径清晰体现三层收敛&#xff1a;从早期…

作者头像 李华
网站建设 2026/4/21 23:25:22

驱动开发系列90 - Mesa Zink kopper 分析

一:相关 vulkan 接口 1. vkQueueWaitIdle 强制 CPU 等待 GPU. 调用堆栈: ctx->base.blit zink_blit zink_kopper_present_readback zink_kopper_present_readback vkQueueWaitIdle 2. vkWaitForFences CPU 等 GPU 把某些提交执行完. 调用堆栈: screen->ba…

作者头像 李华