mybatis–基础–2.5–xml配置–对象工厂(objectFactory)
代码地址
https://gitee.com/DanShenGuiZu/learnDemo/tree/mysql_mybaties_DB/mybatis-learn-master
1、对象工厂(objectFactory)
MyBatis 默认会使用对象工厂(ObjectFactory)来创建返回结果的对象。
简单来说:mybaties 返回的对象由ObjectFactory来创建
2、自定义对象工厂
- 创建目标类,比如说创建user类
- 通过默认无参构造方法
- 通过存在的参数映射来调用带有参数的构造方法
- 如果想覆盖对象工厂的默认行为,可以通过自定义对象工厂来实现
- 继承DefaultObjectFactory
package com.cl.mybatis.learn.day07;
import java.util.Collection;
import java.util.Properties;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
public class ExampleObjectFactory extends DefaultObjectFactory {
@Override
public Object create(Class type) {
if (User.class == type) {
// 创建结果对象
User user = (User) super.create(type);
// 通过复杂的计算,设置addr的值
user.setAddr("CHINA");
return user;
}
return super.create(type);
}
// public Object create(Class type, List<Class> constructorArgTypes,
// List<Object> constructorArgs) {
// return super.create(type, constructorArgTypes, constructorArgs);
// }
@Override
public void setProperties(Properties properties) {
super.setProperties(properties);
}
@Override
public <T> boolean isCollection(Class<T> type) {
return Collection.class.isAssignableFrom(type);
}
}
<!-- mybatis-config.xml -->
<objectFactory type="com.cl.mybatis.learn.day07.ExampleObjectFactory">
<property name="someProperty" value="100"/>
</objectFactory>