MyBatis的工作流程:
1)读取Mybatis的配置文件:mybatis-config.xml是mybatis的全局配置文件,包括其运行环境;
2)加载Mapper映射文件:SQL映射文件中配置了数据库操作的sql语句,每个映射文件对应数据库中一张表,需要在mybatis-config.xml中进行加载,mybatis-config.xml文件可以加载多个映射文件。
3)构造SqlSessionFactory对象:根据配置文件中的数据库连接、数据源、事务管理等配置信息构建SqlSessionFactory对象
4)创建会话对象Sqlsession:通过SqlSessionFactory对象创建Sqlsession对象,Sqlsession对象内部封装了执行SQL语句的所有方法,由SqlSession执行对数据库的操作,并返回最终的处理结果;
SqlSession的四大对象:
1)Executor对象:是一个接口,根据SqlSession对象传递的信息找到对应的Statement,执行相应的语句; MyBatis存在三种执行器:
- SimpleExecutor:简易执行器,默认的执行器
- ReuseExecutor:一种执行器重用预处理语句
- BatchExecutor:执行器重用语句和批量更新,会批量执行所有更新语句
在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要执行的SQL语句的id,参数等信息;
2)StatmentHandler对象:根据映射文件中配置,使用数据库的Statement执行操作,是四个对象的核心;和Executor一样,MyBatis也提供了三种会话处理器;
- SimpleStatmentHandler:
- PreparedStatmentHandler:对应JDBC里面的PreparedStatement类
- CallableStatmentHandler:对应JDBC里面的CallableStatement类
3)ParameterHandler对象:用于SQL对参数的处理(对预编译语句进行参数处理);
4)ResultHandler对象:对最后返回的结果集(ResultSet)进行封装;
SqlSession的执行过程:
SqlSession通过Executor创建StatementHandler来运行的,而StatementHandler要经过下面三步:
- prepareed预编译SQL
- parameterize设置参数(通过调用ParameterHandler进行设置的,参数时根据类型处理器typeHandler进行处理的)
- query/update执行SQL(通过resultHanler进行处理结果的封装,执行update语句会返回整数,否则通过typeHandler处理结果类型,然后用ObjectFactory提供的规则组装对象,返回给调用者)