当创建结果集时,MyBatis 会使用一个对象工厂来完成创建这个结果集实例。在默认的情况下,MyBatis 会使用其定义的对象工厂——DefaultObjectFactory(org.apache.ibatis.reflection.factory.DefaultObjectFactory)来完成对应的工作。
MyBatis 允许注册自定义的 ObjectFactory。如果自定义,则需要实现接口 org.apache.ibatis.reflection.factory.ObjectFactory,并给予配置。
在大部分的情况下,我们都不需要自定义返回规则,因为这些比较复杂而且容易出错,在更多的情况下,都会考虑继承系统已经实现好的 DefaultObjectFactory ,通过一定的改写来完成我们所需要的工作,如下所示。
- package com.mybatis.test;
- import java.util.List;
- import java.util.Properties;
- import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
- import org.apache.log4j.Logger;
- public class MyObjectFactory extends DefaultObjectFactory {
- private static final long serialVersionUID = -4293520460481008255L;
- Logger log = Logger.getLogger(MyObjectFactory.class);
- private Object temp = null;
- @Override
- public void setProperties(Properties properties) {
- super.setProperties(properties);
- log.info(“初始化参数:【” + properties.toString() + “】”);
- }
- // 方法2
- @Override
- public T create(Class type) {
- T result = super.create(type);
- log.info(“创建对象:” + result.toString());
- log.info(“是否和上次创建的是同一个对象:【” + (temp == result) + “】”);
- return result;
- }
- // 方法1
- @Override
- public T create(Class type, List> constructorArgTypes,
- List