返回
序言
后端
2023-11-12 18:23:28
Mybatis源码分析02:执行SQL语句
本文是mybatis源码分析的第二篇,我们将对Mybatis执行SQL语句的流程进行详细分析。在准备Mybatis示例demo一文中,我们提供了如下的测试主类:
public static void main(String[] args) throws Exception {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 查询数据
Blog blog = sqlSession.selectOne("org.mybatis.spring.sample.mapper.BlogMapper.selectBlog", 1);
System.out.println(blog);
// 新增数据
Blog blog2 = new Blog();
blog2.setId(2);
blog2.setTitle("MyBatis 入门教程");
blog2.setContent("欢迎学习 MyBatis 入门教程。");
sqlSession.insert("org.mybatis.spring.sample.mapper.BlogMapper.insertBlog", blog2);
// 更新数据
Blog blog3 = new Blog();
blog3.setId(1);
blog3.setTitle("MyBatis 入门教程 v2");
blog3.setContent("欢迎学习 MyBatis 入门教程 v2。");
sqlSession.update("org.mybatis.spring.sample.mapper.BlogMapper.updateBlog", blog3);
// 删除数据
sqlSession.delete("org.mybatis.spring.sample.mapper.BlogMapper.deleteBlog", 2);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
在解析配置文件一文中,我们主要分析了SqlSessionFac
Mybatis执行SQL语句的流程大致如下:
- 创建SqlSession对象,SqlSession对象是Mybatis执行SQL语句的入口。
- 获取StatementHandler对象,StatementHandler对象负责将SQL语句解析成JDBC Statement对象。
- 根据StatementHandler对象创建ParameterHandler对象,ParameterHandler对象负责设置Statement对象的参数。
- 根据StatementHandler对象创建ResultSetHandler对象,ResultSetHandler对象负责将JDBC ResultSet对象转换成Java对象。
- 调用StatementHandler对象的prepare()方法,将SQL语句解析成JDBC Statement对象。
- 调用StatementHandler对象的parameterize()方法,使用ParameterHandler对象设置Statement对象的参数。
- 调用StatementHandler对象的query()方法,执行SQL语句并返回JDBC ResultSet对象。
- 调用ResultSetHandler对象的handleResultSets()方法,将JDBC ResultSet对象转换成Java对象。
- 返回Java对象。
至此,我们已经对Mybatis执行SQL语句的流程进行了详细分析。希望本文对您有所帮助。