mybatis 執行體系一
前言: mybatis是一款半自動的orm框架,簡化了jdbc查詢.
我們傳統的JDBC 查詢是這樣子的
public class MybatisTest {
String url = "jdbc:mysql://localhost:3306/python";
String username ="root";
String password ="123456";
private Connection connection;
@Before
public void init() throws SQLException, ClassNotFoundException {
// 因爲有了SPI ,所以我們不需要手動的去Class.forName
// Class.forName("com.mysql.jdbc.driver");
connection = DriverManager.getConnection(url,username,password);
}
@After
public void finish() throws SQLException {
connection.close();
}
@Test
public void testJdbc () throws SQLException {
String sql = "select * from git";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
resultSet.close();
preparedStatement.close();
}
}
知識點 SPI ->Service Provider Interface 因爲有了spi機制 ,我們不需要自己去Class.forName去加載類
Mybatis 的查詢流程是這樣子的。
使用mybatis 後,我們不需要去處理結果集合,只需要使用對應的數據類型來接收就好了,代碼的結構性和整潔性得到了提升。
前言完畢。
現在我們簡單的打斷點debug一下。
發現第一步走的是 mapperProxy.invoke方法
第二步走的是 MapperMethod。execute 方法
第三步走的是 sqlsession 的 selectList方法
第四步走的是 CachingExecutor 的query方法
第五步走的是BaseExecutor 的query方法
第六步驟走的是
doquery 方法
第七步驟走得是preparedStatement 的query方法
第八步 使用 resulthandler 處理結果 並返回
簡單看完上面的執行流程以後我們可以把mybatis的 流程分成四大塊
到此mybatis的基本執行體系分析完成。