Mybatis源码学习笔记

本文介绍了Mybatis核心概念,包括Configuration、SqlSessionFactory等,阐述了代码执行顺序,即解析xml文件、初始化执行器、操作数据库,还给出代码执行流程图,最后列举了Mybatis中用到的设计模式,如工厂、建造者、单例等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis核心概念:

 

Configuration : 管理 mysql-config.xml 全局配置关系类

SqlSessionFactory: Session 管理工厂接口

Session:  SqlSession 是一个面向用户(程序员)的接口。SqlSession 中提供了很多操作数据库的方法

Executor :  执行器是一个接口(基本执行器、缓存执行器)。 作用:SqlSession 内部通过执行器操作数据库

MappedStatement: 底层封装对象 。作用:对操作数据库存储封装,包括 sql 语句、输入输出参数

StatementHandler :具体操作数据库相关的 handler 接口

ResultSetHandler :具体操作数据库返回结果的 handler 接口

 

Debug代码执行顺序:

入口代码:

    String resource = "mybatis-config.xml";
    //获取源配置文件
    InputStream inputStream = Resources.getResourceAsStream(resource);
    //获取sqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //获取session
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //操作数据库
    User user = sqlSession.selectOne("com.jiagouedu.mybatis.UserMapper.selectUser", 1);

 1. 解析xml文件变成Configuration 返回SqlSessionFactory

org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream)
 >org.apache.ibatis.builder.xml.XMLConfigBuilder 构造函数
   >org.apache.ibatis.builder.xml.XMLConfigBuilder.parse
     >org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration mybatis-config.xml内容
       >org.apache.ibatis.parsing.XPathParser.evaluate
        >org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement
         >org.apache.ibatis.session.SqlSessionFactoryBuilder.build(org.apache.ibatis.session.Configuration)
          >org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.DefaultSqlSessionFactory

2. 执行器进行初始化 SimpleExecutor拿到SqlSession

org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession()
 >org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource
  >org.apache.ibatis.transaction.TransactionFactory.newTransaction(javax.sql.DataSource, org.apache.ibatis.session.TransactionIsolationLevel, boolean)
    >org.apache.ibatis.session.Configuration.newExecutor(org.apache.ibatis.transaction.Transaction, org.apache.ibatis.session.ExecutorType)
      >org.apache.ibatis.executor.SimpleExecutor
        >org.apache.ibatis.executor.CachingExecutor  一级缓存 自动
          >org.apache.ibatis.plugin.InterceptorChain.pluginAll 责任链模式拦截器

3.操作数据库

org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(java.lang.String, java.lang.Object)
 >org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(java.lang.String, java.lang.Object)
   >org.apache.ibatis.session.Configuration.getMappedStatement(java.lang.String)
    >org.apache.ibatis.executor.CachingExecutor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler)
     >org.apache.ibatis.executor.CachingExecutor.createCacheKey 缓存的key
      >org.apache.ibatis.executor.CachingExecutor.query(org.apache.ibatis.mapping.MappedStatement, java.lang.Object, org.apache.ibatis.session.RowBounds, org.apache.ibatis.session.ResultHandler, org.apache.ibatis.cache.CacheKey, org.apache.ibatis.mapping.BoundSql)
         >org.apache.ibatis.executor.BaseExecutor.queryFromDatabase
           >org.apache.ibatis.executor.BaseExecutor.doQuery
             >org.apache.ibatis.executor.statement.PreparedStatementHandler.query
               >org.apache.ibatis.executor.resultset.ResultSetHandler.handleResultSets
                >org.apache.ibatis.executor.resultset.DefaultResultSetHandler

 

 以下是代码执行流程图:

 seesion的获取:

Mapper对象的获取:

 

执行器Executor:

BaseExecutor用到的是规范的理念,使实现这个接口的类都按照这个规范去做对应的事情.

 

Mybatis中用到的设计模式:

1.sqlSessionFactory 工厂

2. build 建造者

3. getInstance ,Cache 单例

4. 委派 装饰

5.InterceptorChain 责任链

6 Proxy 代理

7. Execute Command 命令

8.doQuery 模板

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值