小白mybatis源码看这一遍就够了(4)| SqlSession.select调用到jdbc分析

mybatis源码分析系列:

  1. mybatis源码看这一遍就够了(1)| 前言
  2. mybatis源码看这一遍就够了(2)| getMapper
  3. mybatis源码看这一遍就够了(3)| Configuration及解析配置文件
  4. mybatis源码看这一遍就够了(4)| SqlSession.select调用分析
  5. mybatis源码看这一遍就够了(5)| 与springboot整合

前面mybatis源码看这一遍就够了(2)我们还遗留了个问题是sqlSession.selectList这一步究竟做了啥,这和jdbc又有什么关系?


我们这一章来讲一讲这个sqlSession.selectList他和jdbc究竟是什么不正当关系,是不是真有一腿

我们拿第一章的mybatis例子来分析

List<User> users = sqlSession.selectList("com.cwh.test.dao.UserDao.select");

这里调用DefaultSqlSession.selectList:

 configuration.getMappedStatement获取在上一章mybatis源码看这一遍就够了(3)configuration注册进去到Map<String, MappedStatement> mappedStatements的MappedStatement,其实就是从map里拿出来:

接着调用(CachingExecutor)executor.query:

初始化BoundSql:

接着继续调用query:

然后delegate.query,其实就是调用BaseExecutor.query,query方法里继续调用queryFromDatabase:

然后接着SimpleExecutor.doQuery:

stmt = prepareStatement(handler, ms.getStatementLog());

 prepareStatement执行前准备,也就是在这里进行getConnection就如我们第一章mybatis源码看这一遍就够了(1)jdbc例子的第二步,不信我们跟进去看下:

到下面这一步就到了jdbc相关的JdbcTransaction 类中的getConnection

 

我们就不在继续往里走了,到这里是不是可以确定mybatis和jdbc扯上关系了吧。

获取完connection之后接着构造PreparedStatement也就是第一章mybatis源码看这一遍就够了(1)例子jdbc的第三步:

往里走就是调用如下,这不就是我们第一章mybatis源码看这一遍就够了(1)jdbc例子第三步嘛PreparedStatement statement = connection.prepareStatement("select * from user"):

获取到PreparedStatement接着执行sql,也就是第四步statement.execute啦,我们回到如下:

handler.query调用:

到这里调用的就是PreparedStatement.execute,是不是和第一章mybatis源码看这一遍就够了(1)jdbc例子的第四步一样。往下就是第五步statement.getResultSet()获取结果啦,下面我就不再继续刨了。

至此mybatis整个的初始化过程到调用过程我们就已经很明朗了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值