深入Mybatis原始碼——執行流程
阿新 • • 發佈:2020-07-08
# 前言
上一篇分析Mybatis是如何載入解析XML檔案的,本篇緊接上文,分析Mybatis的剩餘兩個階段:**代理封裝**和**SQL執行**。
# 正文
## 代理封裝
Mybatis有兩種方式呼叫Mapper介面:
```java
private static SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
// 第一種
try (SqlSession session = sqlMapper.openSession(TransactionIsolationLevel.SERIALIZABLE)) {
Blog blog = session.selectOne("org.apache.ibatis.domain.blog.mappers.BlogMapper.selectBlogWithPostsUsingSubSelect", 1);
}
// 第二種
try (SqlSession session = sqlMapper.openSession()) {
AuthorMapper mapper = session.getMapper(AuthorMapper.class);
Author author = mapper.selectAuthor(101);
}
```
從上面程式碼可以看到無論是哪一種首先都要建立**SqlSessionFactory**物件,然後通過這個物件拿到**SqlSession**物件。在早期版本中只能通過該物件的增刪改呼叫Mapper介面,很明顯這種方式可讀性很差,難以維護,寫起來也複雜,所以後面谷歌開始維護Mybatis後,重新封裝提供了第二種方式直接呼叫Mapper介面。不過本質上第二種是在第一種的基礎之上實現的,所以下面就以第二種為主進行分析,進入到**getMapper**方法:
```java