MyBatis源码阅读–MyBatis架构说明
文章目录
MyBatis基本构成
- xml配置文件,参考这里
- SqlSessionFactoryBuilder
解析xml配置文件,创建Configration对象,并根据配置创建SqlSessionFactory - SqlSessionFactory
通过SqlSessionFactory创建SqlSession对象 - SqlSession
可以通过其发送SQL语句去执行并返回结果,或者获取mapper对象 - Mapper
可以通过其发送SQL语句去执行并返回结果
MyBatis整体架构
接口层
用于发送sql语句去执行并返回结果。该模块的核心类是:
org.apache.ibatis.session.SqlSessionFactoryBuilder;
org.apache.ibatis.session.SqlSessionFactory;
org.apache.ibatis.session.SqlSession;
MyBatis和数据库的交互有两种方式:
- 使用传统的MyBatis提供的API;
- 使用Mapper接口
获取SqlSession
SqlSessionFactory factory;
SqlSession sqlSession;
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
sqlSession = factory.openSession();
} catch (Exception ex) {
ex.printStackTrace();
}
- 使用传统的MyBatis提供的API;
List<SysUser> sysUsers = sqlSession.selectList("com.mybatis.dao.mapper.sysUserMapper.selectAll");
- 使用Mapper接口
sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
List<SysUser> sysUsers = sysUserMapper.selectAll();
从上面可知使用传统方式书写起来非常不方便,一般都是使用Mapper方式
通过SqlSession.getMapper(XXXMapper.class) 方法,MyBatis会根据相应的接口声明的方法信息,通过动态代理机制生成一个Mapper实例,我们使用Mapper接口的某一个方法时,MyBatis会根据这个方法的方法名和参数类型,确定Statement Id,底层还是通过SqlSession.select(“statementId”,parameterObject);或者SqlSession.update(“statementId”,parameterObject);等等来实现对数据库的操作
数据处理层
数据处理层主要是实现参数映射,拼装SQL语句,将SQL执行的结果映射到JAVA对象。