MyBatisPlus系列十:公共字段自动填充

元数据处理器接口:

com.baomidou.mybatisplus.mapper.MetaObjectHandler 
insertFill(MetaObject metaObject)    
updateFill(MetaObject metaObject) 

 metaobject: 元对象。是 Mybatis 提供的一个用于更加方便,更加优雅的访问对象的属性,给对象的属性设置值 的一个对象。还会用于包装对象.。支持对 Object 、Map、Collection 等对象进行包装。
 本质上 metaObject 获取对象的属性值或者是给对象的属性设置值,最终是要 通过 Reflector 获取到属性的对应方法的 Invoker,最终 invoke。
1、 给实体添加注解填充字段 @TableFile(fill = FieldFill.INSERT) 。

@TableField(fill = FieldFill.INSERT_UPDATE)
private String name ;

FieldFill类:

public enum FieldFill {
    DEFAULT(0, "默认不处理"),
    INSERT(1, "插入填充字段"),
    UPDATE(2, "更新填充字段"),
    INSERT_UPDATE(3, "插入和更新填充字段");

    private final int key;
    private final String desc;

    private FieldFill(int key, String desc) {
        this.key = key;
        this.desc = desc;
    }

    public static FieldFill getIgnore(int key) {
        FieldFill[] fis = values();
        FieldFill[] arr$ = fis;
        int len$ = fis.length;

        for(int i$ = 0; i$ < len$; ++i$) {
            FieldFill fi = arr$[i$];
            if (fi.getKey() == key) {
                return fi;
            }
        }

        return DEFAULT;
    }

    public int getKey() {
        return this.key;
    }

    public String getDesc() {
        return this.desc;
    }
}

2、自定义公共字段填充处理器。

/**
 * 自定义公共字段填充处理器
 */
public class MyMetaObjectHandler extends MetaObjectHandler {
	
	/**
	 * 插入操作自动填充
	 */
	@Override
	public void insertFill(MetaObject metaObject) {
		//获取到需要被填充的字段的值
		Object fieldValue = getFieldValByName("name", metaObject);
		if(fieldValue == null) {
			System.out.println("*******插入操作 满足填充条件*********");
			setFieldValByName("name", "weiyunhui", metaObject);
		}
	}
	/**
	 * 修改操作自动填充
	 */
	@Override
	public void updateFill(MetaObject metaObject) {
		Object fieldValue = getFieldValByName("name", metaObject);
		if(fieldValue == null) {
			System.out.println("*******修改操作 满足填充条件*********");
			setFieldValByName("name", "weiyh", metaObject);
		}
	}
}

3、MyBatisPlus全局注入自定义公共字段填充处理器。

<bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
 	<!-- 注入公共字段填充处理器 -->
 	<property name="metaObjectHandler" ref="myMetaObjectHandler"></property>
</bean>
<!-- 公共字段填充处理器 -->
<bean id="myMetaObjectHandler" class="com.atguigu.mp.metaObjectHandler.MyMetaObjectHandler"> </bean>

测试:

@Test
public void testMetaObjectHandler() {
	User user = new User();
	user.setId(5);
	user.setLogicFlag(1);
	userMapper.updateById(user);
}

控制台输出:

Preparing: UPDATE tbl_user SET `name`=?, logic_flag=? WHERE id=?
Parameters: weiyh(String), 1(Integer), 5(Integer)
Updates: 1
Time:97 ms - ID:com.atguigu.mp.mapper.UserMapper.updateById
 Execute SQL:
    UPDATE
        tbl_user 
    SET
        `name`='weiyh',
        logic_flag=1 
    WHERE
        id=5]

猜你喜欢

转载自blog.csdn.net/lizhiqiang1217/article/details/89740825