Mybatis的核心对象及运行流程
一、SqlSessionFactory对象
1、SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像。
2、SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式。SqlSessionFactory是创建SqlSession的工厂。
3、 SqlSessionFactory接口源码如下所示:
public interface SqlSessionFactory {
SqlSession openSession();
SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);
Configuration getConfiguration();
}
4、SqlSessionFactoryBuilder构建SqlSessionFactory实例的方式
(1)从XML配置文件构建(推荐使用)
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory会根据Resources资源信息加载对象,获取开发人员在项目配置文件(mybatis-config.xml)的信息,从而产生一个可以与数据库交互的会话实例----SqlSession
(2)预制Configuration实例的方式构建(java代码方式)
DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver",
"jdbc:mysql://localhost/mybatis?useSSL=false&serverTimezone=UTC", "admin", "123456");
Environment environment = new Environment("development ", new JdbcTransactionFactory(), dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(EmployeeMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
5、SqlSessionFactoryBuilder类:是构建sqlSessionFactory的入口类,它是通过不同的入参来构造SqlSessionFactory。 它是用过即释放,其生命周期只存在于方法体内, SqlSessionFactory是单例的,存在于整个应用运行时
二、SqlSession对象:
SqlSession是MyBatis的关键对象,它是应用程序与持久层之间交互操作的一个单线程对象,类似于JDBC中的Connection。SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句。每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,同时SqlSession也是线程不安全的。绝对不能将SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中。使用完SqlSeesion之后关闭很重要,应该确保使用finally块来关闭它。
三、Mybatis的运行流程
Mybatis的整个运行流程是紧紧围绕着数据库连接池配置文件(mybatis-config.xml),以及SQL映射配置文件(xxxMapper.xml)而展开的
首先SqlSessionFactory会话工厂通过Resources资源信息加载对象获取配置文件(mybatis-config.xml)的配置信息,然后产生可以与数据库进行交换的会话实例类SqlSession,会话实例类根据Mapper配置文件中的SQL配置,去执行相应的增、删、改、查操作。而在SqlSession类的内部是通过执行器Executor(分为基本执行器或缓存执行器)对数据库进行操作。执行器Executor与数据库交互依靠的是底层封装对象Mappered Statement,它封装了从Mapper文件中读取的信息(包括SQL语句、输入参数、输出结果类型)。通过执行器Executor与底层封装对象Mappered Statement的结合,Mybatis就实现了与数据库进行交互的功能
Mybatis运行流程图如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现