MyBatis 教程

MyBatis 配置 objectFactory 标签

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>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号