前言:我们在读Java的一些源代码与开源框架时,我们需要先了解一个大概,那么这个大概的标准是什么呢?就是说我们没有必要把一些过于细节及过于底层的东西一开始就去理解,这样子没必要也不现实。
例如:你不可能为了理解一个多重封装的方法去把它所有的原理全部挖掘出来,我是一个Java工程师,为了理解这个方法的所有原理而去理解C语言,在去理解汇编,二进制......
不是不建议大家去挖掘更多的东西,而是一步登天对很多人来说不太现实,一步一步来......
1.为什么要使用MyBatis
1-1.
从层次上看,JDBC是较底层的持久层操作方式,而MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。
1-2.
从功能上看,JDBC就是简单的建立数据库连接,然后创建statement,将sql语句传给statement去执行,如果是有返回结果的查询语句,会将查询结果放到ResultSet对象中,通过对ResultSet对象的遍历。MyBatis则是将JDBC近乎所有重复代码都代理得干干净净。
1-3.
从使用上看,如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;如果要灵活使用sql语句的话建议采用MyBatis框架。(MyBatis也破坏了Java的封装性而JDBC没有)。
3-1.加载核心配置文件到Configuration
3-2.构建SqlSessionFactory
3-3.打开SqlSession会话
3-4.Executor 开始处理请求
3-5.SqlSource解析SQL语句
3-6.StatementHandler执行SQL 语句
3-7.ParameterHandler设置参数
3-8.StatementHandler执行SQL 语句
3-9.ResultSetHandler处理结果集
4.读源代码:
4-1:测试代码,从build(is)执行进去
4-1:MyBatis内部类
typeAliases是parser.parse()的属性 读取后可见的别名。
mappedStatements是 parser.parse()的属性 读取后的接口和增删改查的方法。
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
创建一个XML解析器
所以XMLConfigBuilder 是一个解析器类
MappedStatement是对所有SQL语句的封装
正在上传…重新上传取消
resultMaps保存了所有解析到的
mappedStatement保存了所有解析到的
......其余不主要的一些类似的东西就不一一阐述了。
mapperRegistry保存了所有Mapper接口,以及对应的的代理工厂
所以测试代码的int count = sqlSession.getMapper(SysUserMapper.class).count();
的getMapper(Class clz)可以理解为一个代理工厂,clz便是基于那个类型做 .count()的操作。