Mybatis底层思路打通
首先了解下重要类
XMLConfigBuilder mybatis内置配置文件类,该类继承了BaseBuilder类
BaseBuilder 类中有Configuration字段用于存储配置信息
Environment 存放于Configuration中,用于存放DataSource实例
MappedStatement 从Configuration中获取,与配置文件Mapper中的节点对应(通过接口名+方法名做key对应的)
SqlSessionFactory 用于创建sqlSession
RowBounds mybatis中用于分页的类
大致流程代码
可根据代码中的类点进去看底层代码,了解执行过程
//使用mybatis自带的文件流解析功能,解析配置文件
InputStream inputStream = Resources.getResourceAsStream("");
/**
* 通过mybatis配置获取sqlSession制造工厂
* build方法中会出线XMLConfigBuilder配置文件类,该类继承了BaseBuilder类,
* BaseBuilder类中有Configuration字段用于存储配置信息,
* 其中MyBatis创建的DataSource实例后,会将其放到Configuration对象内的Environment对象中
* new DefaultSqlSessionFactory(Configuration)得到SqlSessionFactory,该类继承了SqlSessionFactory
* SqlSessionFactory中有openSession方法得到SqlSession类
*/
SqlSessionFactory sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder().build(inputStream);
//SqlSession中有对应的crud方法
SqlSession sqlSession = sqlSessionFactoryBuilder.openSession();
/**
* SqlSession api中涉及一个重要类MappedStatement,他是从Configuration中获取的,
* MappedStatement与Mapper配置文件中的一个select/update/insert/delete节点相对应。mapper中配置的标签都被封装到了此对象中,主要用途是描述一条SQL语句
*
* 可以传入RowBounds类进行分页
* 其中executor.query这个方法中会查询缓存中是否有需要的数据,如果没有的话就通过queryFromDatabase方法中的doQuery方法从数据库查找
*/
RowBounds rowBounds = new RowBounds();
sqlSession.selectList("",rowBounds);
//这里不再调用SqlSession 的api,而是获得了接口对象,调用接口中的方法。
// Mapper mapper = sqlSession.getMapper(Class.forName("类地址"));