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的基本执行体系分析完成。