mybatis执行步骤

1.配置文件载入

1.org.apache.ibatis.io.Resources 将文件读入进来,转成输入字节流

2.SqlSessionFactoryBuilder的build方法,解析配置文件,然后构建SqlSessionFactory

1、将输入字节流转换成Document对象,并赋值给XPathParser解析器对象属性document


image.png

2、由 XPathParser解析器对象、environment, Properties对象构建XMLConfigBuilder,在此Configuration对象初始化。


image.png

3、解析器解析出来配置文件根节点root,即,转换成XNode,执行的方法是parser.evalNode("/configuration")
image.png

4、根据根节点root,解析其他节点

image.png
private void parseConfiguration(XNode root) {
    try {
      // settings解析成Properties
      Properties settings = settingsAsPropertiess(root.evalNode("settings"));
      // properties元素解析
      propertiesElement(root.evalNode("properties"));
      loadCustomVfs(settings);
      // typeAliases元素解析
      typeAliasesElement(root.evalNode("typeAliases"));
      // plugins元素解析
      pluginElement(root.evalNode("plugins"));
      // objectFactory元素解析
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      reflectorFactoryElement(root.evalNode("reflectorFactory"));
     // settings元素解析
      settingsElement(settings);
      // read it after objectFactory and objectWrapperFactory issue #631
     // environments元素解析
      environmentsElement(root.evalNode("environments"));
     // databaseIdProvider元素解析
      databaseIdProviderElement(root.evalNode("databaseIdProvider"));
     // typeHandlers元素解析
      typeHandlerElement(root.evalNode("typeHandlers"));
     // mappers元素解析
      mapperElement(root.evalNode("mappers"));
    } catch (Exception e) {
      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }
  }

2.属性文件载入

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
在 properties 元素体内指定的属性首先被读取。
然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
例如:


  
  

最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

String resource = "com/gupaoedu/lsj/mybatis/mybatis-config.xml";
Properties properties = new Properties();
properties.load(App.class.getClassLoader().getResourceAsStream("com/gupaoedu/lsj/mybatis/db.properties"));   
InputStream inputStream = Resources.getResourceAsStream(resource);
// 第二个参数传入属性文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,properties);

4.创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

5.SqlSession数据库操作

根据mapper的namespace+操作方法,转化jdbc的sql执行
User user = (User)sqlSession.selectOne("com.gupaoedu.lsj.mybatis.mapper.UserMapper.selectUser",1);

你可能感兴趣的:(mybatis执行步骤)