MyBatis源码之MyBatis中SQL语句执行过程

MyBatis是一个流行的Java持久层框架,本文将深入探讨MyBatis中SQL语句的执行过程。通过分析MyBatis源码,我们将了解MyBatis中SQL语句的执行入口、Mapper接口的动态代理、SQL执行流程等关键内容。

SQL执行入口

在使用MyBatis编程时,通常有两种方式进行SQL语句的执行。第一种方式是直接通过SqlSession接口的selectList方法执行SQL语句。代码示例如下:

SqlSession sqlSession = sqlSessionFactory.openSession();
List<Student> studentList = sqlSession.selectList("com.sjdwz.dao.StudentMapper.findAll");

第二种方式是通过SqlSession接口的getMapper方法获取Mapper接口的代理对象,然后调用Mapper接口中的方法执行SQL语句。代码示例如下:

SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<Student> studentList = studentMapper.findAll();

方式一入口分析

方式一调用的是SqlSession接口的selectList方法。在执行过程中,会经过多次重载,最终调用MappedStatement封装的SQL语句,并执行executor的query方法。

方法二入口分析

方式二调用的是SqlSession接口的getMapper方法,最终会通过工厂创建接口的代理对象。

Mapper接口动态代理

通过工厂创建的代理对象会执行MapperProxy类中的invoke方法,这个方法内部会调用MapperMethodInvoker执行具体的SQL语句。

SQL执行流程

查询SQL执行流程

查询SQL的执行流程主要包括selectOne/selectList、SQL获取、参数设置、SQL执行和结果集封装等步骤。在执行过程中,涉及到DefaultSqlSession、CachingExecutor、SimplyExecutor等关键组件。

增删改SQL执行流程

对于增删改SQL的执行流程,实际上最终都会执行update方法。在执行过程中,涉及到DefaultSqlSession、CachingExecutor、SimplyExecutor等组件。

MyBatis中的增删改操作代码示例如下:

//DefaultSqlSession
@Override
public int insert(...) {
return update(statement, parameter);
}
@Override
public int update(String statement) {
return update(statement, null);
}
@Override
public int delete(...) {
return update(....);
}

结语

通过本文的分析,我们深入了解了MyBatis中SQL语句的执行过程,包括SQL执行入口、Mapper接口动态代理、SQL执行流程等关键内容。这些知识对于理解MyBatis的内部工作原理具有重要意义。

未经允许不得转载:大白鲨游戏网 » MyBatis源码之MyBatis中SQL语句执行过程