美文网首页mybatis-plus
11.MybatisPlus 自动填充

11.MybatisPlus 自动填充

作者: 神奇作手 | 来源:发表于2020-03-27 10:53 被阅读0次

1.简介

  有的表中有新增时间、最后一次操作时间、创建人,最后一次操作人等问题,每次操作时都需要去添加对应的数据,每一块的操作都要添加此操作,比较麻烦。这时候可以使用mybatis-plus的自动填充。

2.自动填充实现

2.1.在实体类中对字段添加注解,标明要进行自动填充

    @TableField(fill = FieldFill.INSERT)//创建时填充
    private LocalDateTime createTime;//创建时间

    @TableField(fill = FieldFill.UPDATE)//修改时填充
    private LocalDateTime updateTime;//修改时间

2.2.自定义自动填充实现类MyMetaObjectHandler实现MetaObjectHandler

package com.mp.component;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @Description 自动填充类
 * @Author LL
 * @Date 2020-03-27 09:58
 */
@Component
public class MyMetqObjectHandle implements MetaObjectHandler {

    //添加时填充
    @Override
    public void insertFill(MetaObject metaObject) {
        setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);
//        setFieldValByName("createTime", LocalDateTime.now(), metaObject);//通用方法
    }

    //更新时填充
    @Override
    public void updateFill(MetaObject metaObject) {
        setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
//        setFieldValByName("updateTime", LocalDateTime.now(), metaObject);//通用方法
    }
}

2.3.编写测试类测试

package com.mp.fill;

import com.mp.dao.UserMapper;
import com.mp.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @Description 自动填充测试
 * @Author LL
 * @Date 2020-03-27 10:04
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class FillTest {

    @Autowired
    private UserMapper userMapper;

    /**
     * 测试添加时自动填充
     */
    @Test
    public void insert(){
        User user = new User();
        user.setName("关羽")
                .setAge(32)
                .setEmail("gy@baomidou.com")
                .setManagerId(1088248166370832385L);
        int row = userMapper.insert(user);
        System.out.println("影响行数:"+row);

        User res = userMapper.selectById(user.getId());
        System.out.println(res);
    }

    /**
     * 测试更新时自动填充
     */
    @Test
    public void update(){
        User user = new User();
        user.setId(1243360631283564545L)
                .setAge(33);
        int row = userMapper.updateById(user);
        System.out.println("影响行数:"+row);

        User res = userMapper.selectById(1243360631283564545L);
        System.out.println(res);
    }

}

3.自动填充优化

在自动填充前可以做一系列的代码逻辑处理,处理后在填充

package com.mp.component;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @Description 自动填充类
 * @Author LL
 * @Date 2020-03-27 09:58
 */
@Component
public class MyMetqObjectHandle implements MetaObjectHandler {

    //添加时填充
    @Override
    public void insertFill(MetaObject metaObject) {
        boolean hasSetter = metaObject.hasSetter("createTime");//判断是否有此字段
        boolean hasGetter = metaObject.hasGetter("createTime");
        System.out.println(hasSetter);
        System.out.println(hasGetter);
        if (hasSetter){//有此字段了,在自动填充
            System.out.println("填充添加处理~~~");
            setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);
        }
//        setFieldValByName("createTime", LocalDateTime.now(), metaObject);//通用方法
    }

    //更新时填充
    @Override
    public void updateFill(MetaObject metaObject) {
        Object val = getFieldValByName("updateTime", metaObject);
        if (val==null){//是否自己设置了此字段的值
            System.out.println("填充更新处理~~~");
            setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        }
//        setFieldValByName("updateTime", LocalDateTime.now(), metaObject);//通用方法
    }
}

相关文章

  • 11.MybatisPlus 自动填充

    1.简介   有的表中有新增时间、最后一次操作时间、创建人,最后一次操作人等问题,每次操作时都需要去添加对应的数据...

  • 【原创】使用EXCEL数据自动填充WORD文档中的表格

    关键字:填充 自动填充 填充WORD 使用EXCEL数据 小工具名称:WORD表格自动填充工具 功能介绍:1、自动...

  • Excel自动填充

    Excel中有4种填充方式:等差数字填充 、日期的自动填充、文字自动填充及特定内容的填充。效果如下: 其中,等差数...

  • sketch插件:自动填充神器Craft v1.0.51免激活版

    还在寻找自动填充插件的注意啦!现macdown小编为大家带来一款sketch自动填充神器,这款神器拥有文本自动填充...

  • Autofill Framework(自动填写)用法详解

    Autofill Framework(自动填写)用法详解 此示例演示了如何使用自动填充框架,其中包括具有应自动填充...

  • Excel 实用方法

    1、合并单元格中自动填充序号: 2、取消合并单元格并自动填充:

  • MAC Numbers 序号自动填充

    Numbers 序号自动填充

  • 开发知识点总结2

    1、修改Chrome记住密码后自动填充表单的黄色背景 产生原因:由于Chrome默认会给自动填充的input表单加...

  • 短信自动填充

    用到ContentObserver的观察者模式 1、创建短信观察者 2、注册 3、解注册 4、获得值更新UI 5、...

  • 序号自动填充

    选中自己文档的编号一栏开始计数的第一行,输入公式=ROW()-1 在选中输入公式这个单元格的前提下,鼠标放在单元格...

网友评论

    本文标题:11.MybatisPlus 自动填充

    本文链接:https://www.haomeiwen.com/subject/oegkuhtx.html