Mybatis数据处理流程
1.创建配置并调用api
核心配置文件configuration.xml和mapper.xml配置完成后,调用mybatis框架中的数据库操作接口
2.加载配置并初始化
Mybatis框架会根据mapper跟configuration的内容,使用资源辅助类resourcers把配置文件读成输入流,通过解析器解析并封装到Configuration对象和mappedstatement对象中,最终存储到内存中。
3.创建会话并接受请求
SqlSessionFactoryBuilder会创建工厂SqlSessionFactory,sqlSessionFactory会根据应用程序端请求,创建SqlSession
4.处理请求
SqlSession将会话转发给Executor,执行器再分派到语句处理器StatementHandler,处理器结合参数处理器,对数据库进行操作(封装了JDBC statement)
5.StatementHandler处理完数据库操作后,会协同ResultSetHandler以及TypeHandler,对数据库返回结果进行映射封装返回对象。
Resource类
构建配置对象时,将XML文件信息加载成流,这就是Resources类的作用。
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("Config.xml");
会话工厂创建器SqlSessionFactoryBuilder
解析文件流并构建sqlSessionFactory
// 获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
builder是通过XMLConfigBuilder解析文件流,封装成配置对象Configuration,再使用该对象构建factory实例/
public SqlSessionFactory build(
InputStream inputStream,
String environment,
Properties properties) {
// 配置解析器解析
XMLConfigBuilder parser =
new XMLConfigBuilder(
inputStream,environment, properties);
// 最终实例会话工厂
return build(parser.parse());
}
SqlSessionFactory 一经实例,SqlSessionFactoryBuilder 使命完成,便可消亡,便可被丢弃。
SqlSessionFactory会话工厂
- 默认实现DefaultSqlSessionFactory
- SqlSessionManager **(仅多实现了一个 Sqlsession 接口,已弃用)
会话工厂可以简单创建 SqlSession 实例:
// 创建 SqlSession 实例
SqlSession session = sqlSessionFactory.openSession();
默认的DefaultSqlSessionFactory创建session时都会调用openSessionFromDataSource方法
// 每一个 openSession 最终都会调用此处
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
// 环境配置
final Environment environment = configuration.getEnvironment();
// 事务工厂
final TransactionFactory transactionFactory = getTransactionFactoryFromEnvi