Mybatis 源码学习
1.初始化(MyBatis初始化的过程,就是创建 Configuration对象的过程。)
MyBatis的上述配置信息会配置在XML配置文件中,使用org.apache.ibatis.session.Configuration 对象作为一个所有配置信息的容器加载 xml信息
二、MyBatis基于XML配置文件创建Configuration对象的过程
加载config.xml 配置文件 为inputStream, 创建SqlSessionFactory,创建SqlSession,使用sql
MyBatis初始化的基本过程
- MyBatis内部通过Configuration对象来创建SqlSessionFactory,
1 2 3 4 5 6
| //2. 创建XMLConfigBuilder对象用来解析XML配置文件,生成Configuration对象 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties); //3. 将XML配置文件内的信息解析成Java对象Configuration对象 Configuration config = parser.parse(); //4. 根据Configuration对象创建出SqlSessionFactory对象 return build(config);
|
2.XMLConfigBuilder解析xml文件 将信息放到Configuration 对象中
XMLConfigBuilder会将 mybatis的 XML配置文件的信息转换为Document对象,变成节点,然后取节点对应的Node对象,解析 “/configuration”节点下的子节点信息,然后将解析的结果设置到Configuration对象中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| //1.首先处理properties 节点 propertiesElement(root.evalNode("properties")); //issue #117 read properties first //2.处理typeAliases typeAliasesElement(root.evalNode("typeAliases")); //3.处理插件 pluginElement(root.evalNode("plugins")); //4.处理objectFactory objectFactoryElement(root.evalNode("objectFactory")); //5.objectWrapperFactory objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")); //6.settings settingsElement(root.evalNode("settings")); //7.处理environments environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631 //8.database databaseIdProviderElement(root.evalNode("databaseIdProvider")); //9. typeHandlers typeHandlerElement(root.evalNode("typeHandlers")); //10 mappers mapperElement(root.evalNode("mappers"));
|
如果设置了数据源 则把数据源放入Environment中,然后设置到Configuration中
3.根据configuration对象创建 SqlSessionFactory
这里我们可以手动使用解析xml 使用mybatis
1 2 3 4 5 6 7 8 9 10
| String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //手动创建XMLConfigBuilder,并解析创建Configuration对象 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, null,null); Configuration configuration=parse(); //使用Configuration对象创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); //使用MyBatis SqlSession sqlSession = sqlSessionFactory.openSession(); List list = sqlSession.selectList("com.foo.bean.BlogMapper.queryAllBlogInfo");
|
二,MyBatis 解析sql
静态sql:程序启动的时候解析
动态sql:用户进行查询等sql相关操作的时候解析
http://blog.csdn.net/u012387062/article/details/55005414
三,MyBatis 解析sql
http://blog.csdn.net/luanlouis/article/details/37744073