mybatis源码分析

mybatis查看流程:

1-3是项目启动时进行初始化的过程。4是我们进行查询时真正的执行过程。

1 全局配置文件加载:

1.SqlSessionFactoryBuilder创建SqlsessionFactory时,需要传入一个Configuration 对象。2.XMLConfigBuilder对象会去实例化Configuration。 
3.XMLConfigBuilder对象会去初始化Configuration对象。 
    通过XPathParser去解析全局配置文件,形成Document对象 
    通过XPathParser去获取指定节点的XNode对象。 
    解析Xnode对象的信息,然后封装到Configuration对象中

2 加载映射文件:

就是把如userMapper.xml中的各种标签(如:resultMap,ParameterMap,select,insert等)进行解析封装。 方法为:XMLConfigBuilder#mapperElement(root.evalNode(“mappers”));

//构造方法:专门用来解析映射文件的
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
//创建MappedStatement对象的,并封装到configration中
mapperParser.parse();

3 sqlSource创建:

|–XMLLanguageDriver#createSqlSource:创建SqlSource

通过对sql进行解析,

​ 3.1 带有 ${}和动态标签的sql使用DynamicSqlSource封装;

​ 3.2 带有#{}使用RawSqlSource(raw:未处理)封装。

​ 3.3 最后通过结合parameterMapping(传入参数)解析封装到StaticSqlSource中。

4 sqlSession执行流程。

入口:DefaultSqlSession#selectList(),中间会通过BoundSql进行获取sql语句。BoundSql会返回处理过的sql语句

|--DefaultSqlSession#selectLIst
  |--CachingExecutor#query 
     |--BaseExecutor#query 
       |--BaseExecutor#queryFromDatabase
           |--SimpleExecutor#doQuery 
              |--Configuration#newStatementHandler:创建 StatementHandler,用来执行MappedStatement对象 
                 |--RoutingStatementHandler#构造方法:根据路由规则,设置 不同的StatementHandler
              |--SimpleExecutor#prepareStatement:主要是设置 PreparedStatement的参数
                |--SimpleExecutor#getConnection:获取数据库连接 
                |--PreparedStatementHandler#prepare:创建 PreparedStatement对象 
                |--PreparedStatementHandler#parameterize:设置 PreparedStatement的参数
              |--PreparedStatementHandler#query:主要是用来执行SQL语句, 及处理结果集 
                |--PreparedStatement#execute:调用JDBC的api执行 Statement 
                 |--DefaultResultSetHandler#handleResultSets:处理 结果集
     

其中:下面两个就如同jdbc原生代码中的设置参数和处理结果集的操作。
|–PreparedStatementHandler#parameterize:设置 PreparedStatement的参数
|–DefaultResultSetHandler#handleResultSets:处理 结果集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值