上一章节实现了mapper注册器来将代理类进行注册,获取等,在测试时手动给与注册路径进行一系列操作,这章节采用自动注册方式,通过MapperFactoryBuilder进行解析xml的select标签、Sql、id、namespace等,解析完毕注册到MapperRegistry中,接下来就还是和上节一样的操作,代理对象使用及调用映射到自己需要调用的方法中
1.xml类图

1.SqlSessionFactoryBuilder
这次测试的入口,通过构建build方法调用XMLConfiBuilder调用解析方法(将配置存储到Configuration)中,将得到的配置类以构造函数的方式传入DefaultSqlSessionFactory这样整个流程就都能走下去了
2.XMLConfiBuilder
此类初始化Configuration类,并处理XML的解析方法
3.MappedStatement
解析出来的xml配置数据需要存储个地方,所以就存储此类里,此类里有个内部类Builder,用来构建构造函数将数据存储,build的目的也是能够返回此存储完毕的MappedStatement对象
4.SqlCommonType
Sql命令类型,是个枚举类,存储了insert、select、等标签用于比对时使用
5.Configuration
此类为配置类,主要对MappedStatement的容器存储和MapperRegistry的注册和获取封装,这样其他使用者不用实例化MappedStatement和MapperRegistry,直接使用Configuration就可以了获取到两个对象。
2.工程目录
├─src
│ ├─main
│ │ └─java
│ │ └─df
│ │ └─middleware
│ │ └─mybatis
│ │ │ MybatisApplication.java
│ │ │
│ │ ├─binding
│ │ │ MapperMethod.java
│ │ │ MapperProxy.java
│ │ │ MapperProxyFactory.java
│ │ │ MapperRegistry.java
│ │ │
│ │ ├─builder
│ │ │ │ BaseBuilder.java
│ │ │ │
│ │ │ └─xml
│ │ │ XMLConfigBuilder.java
│ │ │
│ │ ├─io
│ │ │ Resources.java
│ │ │
│ │ ├─mapping
│ │ │ MappedStatement.java
│ │ │ SqlCommandType.java
│ │ │
│ │ ├─session
│ │ │ │ Configuration.java
│ │ │ │ DefaultSqlSession.java
│ │ │ │ SqlSession.java
│ │ │ │ SqlSessionFactory.java
│ │ │ │ SqlSessionFactoryBuilder.java
│ │ │ │
│ │ │ └─defaults
│ │ │ DefaultSqlSessionFactory.java
│ │ │
│ │ └─type
│ │ TypeAliasRegistry.java
│ │
│ └─test
│ ├─java
│ │ └─df
│ │ └─middleware
│ │ └─mybatis
│ │ │ MybatisApplicationTests.java
│ │ │
│ │ ├─dao
│ │ │ IUserDao.java
│ │ │ TestAop.java
│ │ │
│ │ └─po
│ │ User.java
│ │
│ └─resources
│ │ mybatis-config-datasource.xml
│ │
│ └─mapper
│ User_Mapper.xml
3.代码实现
SqlSessionFactoryBuilder:通过build方法调用解析XML方法并最终得到SqlSessionFctoy对象
// mybatis的入口
public class SqlSessionFactoryBuilder {
public SqlSessionFactory build(Reader reader) {
XMLConfigBuilder xmlConfigBuilder = new XMLConfigBuilder(reader);
return build(xmlConfigBuilder.parse());
}
public SqlSessionFactory

642

被折叠的 条评论
为什么被折叠?



