码迷,mamicode.com
首页 > 编程语言 > 详细

MyBatis整合Spring的实现(7)

时间:2015-10-26 10:36:09      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

MyBatis整合Spring的实现(6)中分析了方法propertiesElement,下面继续往下分析代码:

1 方法typeAliasesElement

private void typeAliasesElement(XNode parent) {
    if (parent != null) {
      for (XNode child : parent.getChildren()) {
        if ("package".equals(child.getName())) {
          String typeAliasPackage = child.getStringAttribute("name");
          configuration.getTypeAliasRegistry().registerAliases(typeAliasPackage);
        } else {
          String alias = child.getStringAttribute("alias");
          String type = child.getStringAttribute("type");
          try {
            Class<?> clazz = Resources.classForName(type);
            if (alias == null) {
              typeAliasRegistry.registerAlias(clazz);
            } else {
              typeAliasRegistry.registerAlias(alias, clazz);
            }
          } catch (ClassNotFoundException e) {
            throw new BuilderException("Error registering typeAlias for ‘" + alias + "‘. Cause: " + e, e);
          }
        }
      }
    }
}

这里代码的主要实现就是MyBatis整合Spring的实现(4)中2、3分析的,如果忘记,可以回顾一下,不再深入讨论。下面附上XML配置文件。

1.1 MyBatis全局配置XML文件

<typeAliases>
    <typeAlias alias="hashMap" type="java.util.HashMap"/>
    <typeAlias alias="arraylist" type="java.util.ArrayList"/>
    <package name="cn.vansky.bo.user"/>
    <package name="cn.vansky.bo.menu"/>
</typeAliases>

2 方法pluginElement

private void pluginElement(XNode parent) throws Exception {
    if (parent != null) {
      for (XNode child : parent.getChildren()) {
        String interceptor = child.getStringAttribute("interceptor");
        Properties properties = child.getChildrenAsProperties();
        Interceptor interceptorInstance = (Interceptor) resolveClass(interceptor).newInstance();
        interceptorInstance.setProperties(properties);
        configuration.addInterceptor(interceptorInstance);
      }
    }
}

前面章节中就没有分析拦截器,主要是拦截器的作用是在执行相应的SQL时,才会发挥作用,这里只是对象的实例化,没有过多的进行分析,下面附上分页拦截器配置。

2.1 MyBatis全局配置XML文件

<!-- - - - - - - 分页拦截器- - - - - - - - - -->
<plugins>
    <plugin interceptor="cn.vansky.framework.core.orm.mybatis.plugin.page.PaginationInterceptor">
        <property name="dialectClass" value="cn.vansky.framework.core.orm.mybatis.plugin.page.dialect.MySQLDialect"/>
        <property name="sqlPattern" value=".*findPage*.*"/>
    </plugin>
</plugins>

3 方法objectFactoryElement

  private void objectFactoryElement(XNode context) throws Exception {
    if (context != null) {
      String type = context.getStringAttribute("type");
      Properties properties = context.getChildrenAsProperties();
      ObjectFactory factory = (ObjectFactory) resolveClass(type).newInstance();
      factory.setProperties(properties);
      configuration.setObjectFactory(factory);
    }
  }

这里作者没有进行过配置,所以在网上找了个解释:MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。默认情况下,我们不需要配置,mybatis会调用默认实现的objectFactory。 除非我们要自定义ObjectFactory的实现, 那么我们才需要去手动配置。

3.1 MyBatis全局配置XML文件

<objectFactory type="org.mybatis.example.ExampleObjectFactory">
    <property name="someProperty" value="100"/>
</objectFactory>

方法objectWrapperFactoryElement

private void objectWrapperFactoryElement(XNode context) throws Exception {
    if (context != null) {
      String type = context.getStringAttribute("type");
      ObjectWrapperFactory factory = (ObjectWrapperFactory) resolveClass(type).newInstance();
      configuration.setObjectWrapperFactory(factory);
    }
}

作者没有使用此属性,也没有进行深入研究,所以这里不做讨论,有兴趣的可以,自己研究,知道的童鞋也可以在评论中回复作用。

总结:

这里为什么要一下子讲4个方法呢?主要是这4个方法的代码都不难,只是获取相应的对象放入Configuration(全局配置类)中,相信童鞋们自己看看代码就能懂了。

MyBatis整合Spring的实现(7)

标签:

原文地址:http://my.oschina.net/u/1269959/blog/521983

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!