type
status
date
slug
summary
tags
category
icon
password
Property
Sep 5, 2023 01:09 PM
其实很早就想写一篇 iBatis 的源码分析了, 不过有段时间去学习 Go 了, Java 就放下了, 最近 重新捡起 Java 就把以前没填的坑,填一下.

Init

现在开始正片.
首先是 iBatis 的初始化工作.我们看下面的代码:
好, 上文有说configuration.addMapper(BlogMapper.class)这个方法, 现在我们来分析一下它.

SqlSessionFactory

既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
好! 我们快进到曹丕sqlSessionFactory.openSession()
这样我们就得到了一个SqlSession.
2020.10.12 继续更新
有了SqlSession之后我们就可以操作数据库了。
我们来看看MyBatis是怎么实现session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);的。
以上是SqlSession.selectOne的流程。然而实际中我们直接使用SqlSession来执行数据库操作的情况很少。
大多数情况我们会这样使用MyBatis:
这个方法的详细过程我们使用MyBatis的单元测试来探索。
单元测试代码:
快进到session.getMapper
实际上生产Mapper的逻辑并不多。
主要是执行代理方法时的动作。
执行mapper.selectBlogWithPostsUsingSubSelect(1);的逻辑如下:
下面就是整个代理的执行数据库操作的逻辑,比较长:
OK, 我基本想说的都说完了。后续可能会额外补充一些内容,但是不会在本文中,会写新文章。
2020-9-19GoSyncPool
Loading...