public void test1() throws IOException {
// 1. 读取配置文件,读成字节输入流
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 解析配置文件,封装Configuration对象,创建DefaultSqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 生产了DefaultSqlsession实例对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.(1)根据statementid来从Configuration中map集合中获取到了指定的MappedStatement对象
//(2)将查询任务委派了executor执行器
User user = sqlSession.selectOne("com.zj.mapper.IUserMapper.findById", 1);
System.out.println(user);
// 5.释放资源
sqlSession.close();
}
首先从传统的开发方式入手,完成一个数据查询应该有以上5步。
1、读取配置文件:Resources是一个工具类仅仅是将配置文件读成流,存放于内存中,方便后面解析使用。
2、解析配置文件,并创建SqlSessionFactory:通过XMLConfigBuilder和XMLMapperBuilder去解析mybatis的核心配置文件sqlMapConfig.xml和sql语句映射文件XXMapper.xml,将解析的结果,保存在全局对象Configuration中。
3、创建DefaultSqlsession实例对象:创建了DefaultSqlSession和Executor对象
4、执行sql:完成sql的参数赋值,执行sql,处理结果集这一系列操作。DefaultSqlsession也是委派给Executor执行查询:Executor也需要依靠其它的组件来进行完成查询,如StatementHandler,ResultHandler
5、释放资源
众所周知,mybatis是一个半自动的orm框架,主要就是帮我们将JDBC中大量硬编码sql和配置抽取到xml配置文件和通过一些底层技术完成表与实体的自动映射。
这两个任务都在第2,4步完成的,所以我们在翻看mybatis的源码的时候,完全可以从这两两个地址出发(重点也是两个地址):
第2步看解析配置文件的过程,
第4步看功能的执行流程。