MyBatis 每次创建结果对象新的实例时,它使用一个 ObjectFactory 实例来完成。如果存在构造参数映射:
<resultMap id="RESULT_MAP" type="com.hxstrive.mybatis.resultmap.demo8.UserBean"> <constructor> <idArg column="user_id" javaType="int" /> <arg column="name" javaType="String" /> </constructor> </resultMap>
MyBatis 默认的 ObjectFactory 对象,将不使用默认构造方法,而是使用带有参数(int、String类型)的构造方法去创建对象。
如果你想重写默认的 ObjectFactory,你可以创建你自己的 ObjectFactory(继承 DefaultObjectFactory 类)。例如:
public class MyObjectFactory extends DefaultObjectFactory {
    /** 处理默认构造方法 */
    public Object create(Class type) {
        return super.create(type);
    }
    
    /** 处理带参数构造方法 */
    public Object create(Class type,List<Class> constructorArgTypes, List<Object> constructorArgs) {
        return super.create(type, constructorArgTypes, constructorArgs);
    }
    
    /**
     * 在初始化你的 ObjectFactory 实例后,<objectFactory> 标签中定义的属性会被传递给 setProperties 方法
     * 该方法可以被用来配置 ObjectFactory 对象
     */
    public void setProperties(Properties properties) {
        super.setProperties(properties);
    } 
    
}然后在 mybatis-cfg.xml 文件中配置自定义对象工厂,如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="database.properties"/> <!-- 定义自己的对象工厂 --> <objectFactory type="com.hxstrive.mybatis.factory.MyObjectFactory "> <property name="someProperty" value="100"/> </objectFactory> <!-- 忽略其他配置 --> </configuration>
