1.3 MyBatis框架的工作原理
首先了解一下MyBatis框架的执行流程,如图1.19所示。
图1.19 MyBatis框架的执行流程
可以看出,MyBatis框架在操作数据库时经过了8个步骤。下面就对每步流程进行详细讲解,具体如下。
(1)读取MyBatis配置文件mybatis-config.xml。mybatis-config.xml作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,其中主要功能是获取数据库连接。
(2)加载映射文件Mapper.xml。Mapper.xml文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。mybatis-config.xml可以加载多个配置文件,每个配置文件都对应数据库中的一张表。
(3)构建会话工厂SqlSessionFactory。通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。
(4)创建会话对象SqlSession。由会话工厂创建SqlSession对象,该对象中包含执行SQL的所有方法。
(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库。它会根据SqlSession传递的参数,动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
(6)MappedStatement对象。在Executor接口的执行方法中,包含一个MappedStatement类型的参数。该参数是对映射信息的封装,用于存储要映射的SQL语句的ID、参数等。Mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的ID即是MappedStatement的ID。
(7)输入映射。在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义(Map类型、List类型、基本类型和POJO类型),Executor执行器通过MappedStatement对象在执行SQL前,将输入的Java对象映射到SQL语句中。这里对输入参数的映射过程就类似于JDBC编程中对preparedStatement对象设置参数的过程。
(8)输出映射。在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义(Map类型、List类型、基本类型、POJO类型),Executor执行器通过MappedStatement对象在执行SQL语句后,将输出结果映射至Java对象中,这个过程就类似于JDBC编程中对结果的解析处理过程。
通过上面对MyBatis执行流程的讲解,读者对其有个初步了解即可。