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>