mybatis源码解析(一) XML初始化流程

准备工作

  • 创建一个maven项目
    https://www.jianshu.com/p/e2dc268172be
  • pom.xml文件



  4.0.0

  com.buddy.study
  xxx
  1.0-SNAPSHOT
  war

   Maven Webapp
  
  http://www.example.com

  
    1.8
    1.18.2
    UTF-8
    1.8
    1.8
  

  
    
      junit
      junit
      4.11
      test
    
    
      org.mybatis
      mybatis
      3.5.0
    
    
      mysql
      mysql-connector-java
      5.1.44
    
    
      org.projectlombok
      lombok
      ${lombok.version}
      provided
    
  

  
    xxx
    
      
        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  


  • 创建在src/test/resources/创建mybatis-config.xml配置文件




    

    
    

    
    
        
            
            
                
                
                
                
            
        
    
    
        
    

  • 创建mapper.xml




    

  • 实体
public class User {
    private long id;
    private String name;
    private String psword;
}
  • 创建user表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `psword` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 测试类
public class MybatisTest {

    @Test
    public void parseTest() throws IOException {
        //获取mybatis配置文件流
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); 
        //初始化mybatis整体配置信息以及所有mapper
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取Mapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User room1 = mapper.selectByIdd(-1);
        System.out.println(room1);
    }
}
  • 初始化流程
  1. 具体代码
  InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); 
  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  1. build过程


    image.png

    主要过程为通过inputStream流创建XMLConfigBuilder对象,再使用parse()方法解析dom结构转换为Configuration对象,然后初始化DefaultSqlSessionFactory对象。重点在parse(),下面看看具体做了什么




    Configuration对象有一个成员变量parsed布尔类型 ,主要负责标记是否解析过,也就是说每个Configuration对象只能解析dom元素一次。解析dom使用的是sax,解析之前对事物,缓存等做了别名注册操作。在解析的过程中初始化了mybatis所有属性。
  • properties:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
  • setting:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#settings
  • typeAliases:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases
  • plugins:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins
    支持:
    Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
    ParameterHandler (getParameterObject, setParameters)
    ResultSetHandler (handleResultSets, handleOutputParameters)
    StatementHandler (prepare, parameterize, batch, update, query)
  • objectFactory:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#objectFactory
    默认实现 DefaultObjectFactory
  • objectWrapperFactory:
    官方文档暂无描述
    默认实现 DefaultObjectWrapperFactory
  • reflectorFactory:
    官方文档暂无描述
    默认实现 DefaultReflectorFactory
  • environments:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#environments
    负责事务以及数据库连接信息的配置
  • databaseIdProvider:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#databaseIdProvider
  • typeHandlers:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers
  • mappers:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#mappers
    映射器支持大致两种方式:XML文件,java文件
    XML文件又分为类路径以及本地路径
    java文件分为类路径以及包扫描

你可能感兴趣的:(mybatis源码解析(一) XML初始化流程)