Mybatis架构,SqlSession源码分析

下一篇:通过代理对象执行CUD的源码分析

获取SqlSession对象

加断点,debug进入openSession()方法

可以看到openSession()方法返回的是openSessionFromDataSource()方法执行结果,该方法的第一个参数是configuration.getDefaultExecutorType()

如下图:configuration.getDefaultExecutortype()获取默认的执行方法,默认的执行类型为

“SIMPLE" .

 进入openSessionFromDataSource()方法

该方法的第一个参数execType,值为”SIMPLE“

 先看看ExecutorType都有哪些执行类型

可以看到有3种执行类型

回到openSessionFromDataSource()方法

可以看到,通过configuration.newExecutor()方法返回一个Executor对象

 方法参数execType作为configuration.newExecutor(tx,execType)方法的参数

进入newExecutor(),看到该方法不直接返回SimpleExecutor(),而是进行拦截


根据不同的类型execType,产生不同的Executor,现在获取了一个执行器->SimpleExecutor,但是没有直接返回,而是会对执行器进行拦截操作
executor = (Executor) interceptorChain.pluginAll(executor)
通过装饰模式,将刚才产生的executor包装成一个更加强大的executor。

进入这个interceptorChain.pluginAll()方法,看看如何拦截

 

作用:以后如果我们要给MyBatis写自己的插件,就可以通过拦截器实现。
插件开发: 1 写插件  2放入拦截器

再回到openSession()方法返回的openSessionFromDataSource()方法

 刚刚拦截过的Executor对象,作为DefaultSqlSession()方法参数,

返回DefaultSqlSession(configuration,executor,autoCommit)configuration里面有增删改查标签,executor是执行器,可以执行configuration中的配置信息

现在就是:openSession() ⟵openSessionFromDataSource() ⟵ DefaultSqlSession(configuration,executor,autoCommit)对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis使用SqlSession来执行数据库操作。SqlSessionMyBatis中的核心接口,它提供了多种方法来执行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
发出的红包

打赏作者

素心如月桠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值