mybatis对象工厂(objectFactory)

 

MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。比如:

import com.hhz.entity.User;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;

public class MyObjcetFactory extends DefaultObjectFactory {
    @Override
    public Object create(Class type) {
        if (User.class == type) {
            User user = (User) super.create(type);
            //  给每个user对象的address属性设置为CHINA
            user.setAddress("CHINA");
            return user;
        }
        return super.create(type);

    }
}

使用方法:

mybatis-config.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="config.properties"/>

    <objectFactory type="com.hhz.util.MyObjcetFactory"/>

    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.hhz.dao"/>
    </mappers>

</configuration>

测试以及结果:

    @Test
    public void listTest(){
        UserMapper dao = sqlSession.getMapper(UserMapper.class);
        List<User> list = dao.list();
        System.out.println(list);
    }




日志:
[DEBUG] ==>  Preparing: select * from user 
[DEBUG] ==> Parameters: 
[DEBUG] <==      Total: 4
[User{id=1, username='花花', age=20, sex=false, address='CHINA'}, User{id=2, username='点点', age=30, sex=true, address='CHINA'}, User{id=3, username='yuanyuan', age=25, sex=true, address='CHINA'}, User{id=5, username='品牌', age=35, sex=false, address='CHINA'}]

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值