返回

序言

后端

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语句的流程大致如下:

  1. 创建SqlSession对象,SqlSession对象是Mybatis执行SQL语句的入口。
  2. 获取StatementHandler对象,StatementHandler对象负责将SQL语句解析成JDBC Statement对象。
  3. 根据StatementHandler对象创建ParameterHandler对象,ParameterHandler对象负责设置Statement对象的参数。
  4. 根据StatementHandler对象创建ResultSetHandler对象,ResultSetHandler对象负责将JDBC ResultSet对象转换成Java对象。
  5. 调用StatementHandler对象的prepare()方法,将SQL语句解析成JDBC Statement对象。
  6. 调用StatementHandler对象的parameterize()方法,使用ParameterHandler对象设置Statement对象的参数。
  7. 调用StatementHandler对象的query()方法,执行SQL语句并返回JDBC ResultSet对象。
  8. 调用ResultSetHandler对象的handleResultSets()方法,将JDBC ResultSet对象转换成Java对象。
  9. 返回Java对象。

至此,我们已经对Mybatis执行SQL语句的流程进行了详细分析。希望本文对您有所帮助。