博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis整合Spring的实现(7)
阅读量:5759 次
发布时间:2019-06-18

本文共 2955 字,大约阅读时间需要 9 分钟。

hot3.png

中分析了方法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);          }        }      }    }}

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

1.1 MyBatis全局配置XML文件

    
    
    
    

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文件

    
        
        
    

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文件

    

方法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(全局配置类)中,相信童鞋们自己看看代码就能懂了。

转载于:https://my.oschina.net/u/1269959/blog/521983

你可能感兴趣的文章
java基础(1)
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>
.Net组件程序设计之远程调用(二)
查看>>
ant中文教程
查看>>
Linux常用命令(一)
查看>>
WSUS数据库远端存储条件下切换域及数据库迁移
查看>>
【VMCloud云平台】SCAP(四)租户(一)
查看>>
linux释放内存的方法
查看>>
基于 Android NDK 的学习之旅----- C调用Java
查看>>
Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)
查看>>
Windows 10 技术预览
查看>>
Tomcat http跳转https
查看>>
一个自动布署.net网站的bat批处理实例
查看>>
我的友情链接
查看>>
Centos6.6安装选包及基础场景说明
查看>>
java基础面试题-1
查看>>
深克隆与序列化效率的比较
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
nagios监控使用139邮箱报警
查看>>