Mybatis是支持定制化SQL、存储过程和高级映射的持久层框架。主要完成两件事:
- 封装JDBC的操作
- 利用反射完成Java类和SQL之间的转换
mybatis的主要目的就是管理执行SQL是参数的输入和输出,编写SQL和结果集的映射是mybatis的主要优点
1.Mybatis大体架构流程分析
- 读取配置文件并返回Reader对象
- 使用SqlSessionFactoryBuilder获取SqlSessionFactory源码分析
- 创建session
- 获取相对应mapper
try {
// 1.mybatis配置文件
String resources = "mybatis.xml";
// 2.获取Reader对象
Reader resourceAsReader = Resources.getResourceAsReader(resources);
// 3.获取SqlSessionFactoryBuilder
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
// 4.创建对应的session
SqlSession sqlSession = build.openSession();
// 5.获取对应的mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 6.执行方法
UserEntity user = userMapper.getUser(1);
System.out.println("name:" + user.getName());
} catch (Exception e) {
e.printStackTrace();
}
1.1类图
2.源码分析
2.1获取Reader对象
Reader resourceAsReader = Resources.getResourceAsReader(resources);
public static Reader getResourceAsReader(String resource) throws IOException {
Reader reader;
if (charset == null) {
reader = new InputStreamReader(getResourceAsStream(resource));
} else {
reader = new InputStreamReader(getResourceAsStream(resource), charset);
}
return reader;
}
通过resource(配置文件路径)获取reader对象
2.2获取SqlSessionFactory
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
1.进入到SqlSessionFactoryBuilder().build(resourceAsReader)方法
public SqlSessionFactory build(Reader reader) {
return build(reader, null, null);
}
2.进入源码最终执行的方法是
public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
try {
//XMLConfigBuilder是对mybatis的配置文件进行解析的类,会对myabtis解析后的信息存放在Configuration对象中
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} f