Mybatis_review之配置文件中的objectFactory节点内容说明

Mybatis中有一个默认的创建类的对象,名字叫做DefaultObjectFactory,这个类用于负责创建对象实体类。从这个类的外部看,这个类的主要作用就是根据一个类的类型得到该类的一个实体对象,比如,我们给他一个Tiger的type,他将会给我们一个Tiger的实体对象,我们给他一个java.lang.List对象,他将会给我们一个List的实体对象。这个其实从它的名字上就能看出来。

这个类在官方文档中介绍到DefaultObjectFactory这个类的对象做的事情是非常少的,仅仅是创建,并且初始化一个类的实例。既然称之为工厂,里面就应该可以封装更多的复杂逻辑,从而形成一个工厂的核心能力。那么应该如何扩展呢?

在Mybatis的配置文件中,提供了一个objectFactory的节点,通过这个节点,我们可以将默认的工厂配置为我们自己的工厂实现:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><objectFactory type="com.samsung.mybatis.ExampleObjectFactory">
  <property name="someProperty1" value="1100"/>
  <property name="someProperty9" value="9100"/>
</objectFactory>
</span>

通过上面的配置,我们就将上面工厂的实现类从DefaultObjectFactory变成了我们自己实现的ExampleObjectFactory,面是这个类的简单的一个实现:

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.samsung.mybatis;

import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;

import org.apache.ibatis.reflection.factory.DefaultObjectFactory;

public class ExampleObjectFactory extends DefaultObjectFactory {

    public Object create(Class type) {
        if(type.equals(Tiger.class)){
            Tiger obj= (Tiger)super.create(type);
            obj.setAge(1000);
            obj.setName("chenzw_objectFactory");
            obj.setWeight(73.4);
            return obj;
        }
        return super.create(type);
    }

    public void setProperties(Properties properties) {
        Iterator iterator = properties.keySet().iterator();
        while(iterator.hasNext()){
            String keyValue = String.valueOf(iterator.next());
            System.out.println(properties.getProperty(keyValue));
        }
        super.setProperties(properties);
    }

    public <T> boolean isCollection(Class<T> type) {
        return Collection.class.isAssignableFrom(type);
    }
}
</span>

下面简单的看一下这几个方法都是干什么的,通过debug我们可以得到下面的结论:

1)      Create(Type,type) 通过接受一个type类型,得到该对象的一个实例,调用的是对象的无参构造函数,内部实现毫无疑问就是使用java的反射,或者是使用了CGLIB抑或是JAVA的ASSIST。

2)      setProperties(Properties properties)方法,对在节点中配置的property内容进行了加载,可以通过传入的属性文件内容影响程序逻辑,这个跟容器对web.xml的解析的原理是差不多的,原理也就是XML解析形成对象,然后以参数的方式传递到方法中。

3)      isCollection()这个方法可以方便当前类中的调用,可以用于判断要生成的这个对象是不是集合对象,我们应该记住这种判断是否是集合类的判断方式,用在自己的代码中:Collection.class.isAssignableFrom(type);

Mybatis_review之配置文件中的objectFactory节点内容说明

时间: 2024-10-14 02:06:22

Mybatis_review之配置文件中的objectFactory节点内容说明的相关文章

Mybatis_review之配置文件中的properties节点内容说明

Properties的设置格式 在Demo项目中使用的Mybatis-config.xml文件中的配置如下: <span style="font-family:KaiTi_GB2312;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&quo

Mybatis_review之配置文件中的typeHandlers节点内容说明

Mybatis为什么要在configuration file中提供typeHandlers节点 因为java类型与数据库中保存的类型是有很大差异的,例如 在java中的类型为int,但是在数据库中可能为int也可能为number.因此建立数据库的类型映射是非常重要的.为了兼容多个数据库,以及考虑到未来数据库的发展,Mybatis采用了插入的方式来解决类型映射的问题. 我们可以在mybatis的文件夹org.apache.ibatis.type的下面看到很多中typeHandler.与其他的框架中

Mybatis_review之配置文件中的typeAliases节点内容说明

Mybatis为什么要提供别名? Mybatis最基础的Demo中体现要做的事情是非常简单的,如果使用原生的JDBC来实现数据库表与对象之间的映射的话,我们应该怎么做呢?首先,使用ClassForName在静态代码块中注册一个驱动类.然后,使用静态类DriverManager来获取一个数据库的连接对象,当然在这一步我们需要提供URL,username以及password等用于连接数据库以及鉴权的信息.第三,得到连接之后,建立statement或者是preparedStatment对象,第四,执行

Spring配置文件中突然出现异常Referenced file contains errors

Referenced file contains errors (http://cxf.apache.org/schemas/jaxws.xsd). For more information, right click on the message in the Problems View and select "Show Details..." 在Eclipse IDE中的一个J2EE工程,之前是好好的,一段时间没去搭理. 有一天需要在项目中加点东西,打开工程一看,其中一个Spring

ASP.NET配置文件中常用到的节点信息

 web.config文件是一个XML文件,是以<confirguration>为根结点展开的.上一面从宏观上讲解了一下有关配置的文件的内容,下面是一些有关于配置文件常用的操作.图片请详见下图 .config常用操作 <appSettings>节点 主要用来存储asp.net应用程序的一些配置信息,个人感觉是存储一些以后可能会变化的配置信息.例如网页中上传文件的保存路径.个人曾做过有关XML一个小型的数据库,通过<appSettings>来反射XML文件的保存路径

drupal中根据不同的内容类型节点显示不同的样式

在template.tpl中添加如下代码: function lee_preprocess_node(&$variables) { if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) { $variables['classes_array'][] = 'node-full'; } } 在template文件下建立模板文件node--article.tpl.php 最后清除下缓存即可!

MySQL中双NDBD节点Cluster快速配置

是MySQL适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.在MyQL 5.0及以上的二进制版本中.以及与最新的Linux版本兼容的RPM中提供了该存储引擎.(注意,要想获得MySQL Cluster 的功能,必须安装 mysql-server 和 mysql-max RPM).目前能够运行MySQL Cluster 的操作系统有Linux.Mac OS X和Solaris(一些用户通报成功地在FreeB

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

mybatis学习(三)----优化Mybatis配置文件中的配置

一.把连接数据库的配置单独放在一个properties文件中 前面我们是把数据库的连接信息放在了mybatis-config.xml中,如下: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/myb