11.MybatisPlus 自動填充

1.簡介

??有的表中有新增時(shí)間、最后一次操作時(shí)間、創(chuàng)建人,最后一次操作人等問題,每次操作時(shí)都需要去添加對應(yīng)的數(shù)據(jù),每一塊的操作都要添加此操作,比較麻煩。這時(shí)候可以使用mybatis-plus的自動填充。

2.自動填充實(shí)現(xiàn)

2.1.在實(shí)體類中對字段添加注解,標(biāo)明要進(jìn)行自動填充

    @TableField(fill = FieldFill.INSERT)//創(chuàng)建時(shí)填充
    private LocalDateTime createTime;//創(chuàng)建時(shí)間

    @TableField(fill = FieldFill.UPDATE)//修改時(shí)填充
    private LocalDateTime updateTime;//修改時(shí)間

2.2.自定義自動填充實(shí)現(xiàn)類MyMetaObjectHandler實(shí)現(xiàn)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 {

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

    //更新時(shí)填充
    @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;

    /**
     * 測試添加時(shí)自動填充
     */
    @Test
    public void insert(){
        User user = new User();
        user.setName("關(guān)羽")
                .setAge(32)
                .setEmail("gy@baomidou.com")
                .setManagerId(1088248166370832385L);
        int row = userMapper.insert(user);
        System.out.println("影響行數(shù):"+row);

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

    /**
     * 測試更新時(shí)自動填充
     */
    @Test
    public void update(){
        User user = new User();
        user.setId(1243360631283564545L)
                .setAge(33);
        int row = userMapper.updateById(user);
        System.out.println("影響行數(shù):"+row);

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

}

3.自動填充優(yōu)化

在自動填充前可以做一系列的代碼邏輯處理,處理后在填充

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 {

    //添加時(shí)填充
    @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);//通用方法
    }

    //更新時(shí)填充
    @Override
    public void updateFill(MetaObject metaObject) {
        Object val = getFieldValByName("updateTime", metaObject);
        if (val==null){//是否自己設(shè)置了此字段的值
            System.out.println("填充更新處理~~~");
            setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        }
//        setFieldValByName("updateTime", LocalDateTime.now(), metaObject);//通用方法
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,274評論 0 4
  • 上一節(jié)我們學(xué)習(xí)了mybatis-plus 的自定義全局操作和全局sql注入,這一節(jié)我們來學(xué)習(xí)一下mybatis-p...
    runewbie閱讀 998評論 0 0
  • 一、MybatisPlus簡介 1.1.簡介 Mybatis-Plus(簡稱MP)是一個(gè) Mybatis 的增強(qiáng)工...
    Waldeinsamkeit4閱讀 18,399評論 3 76
  • 馬上兒子又要放假了,這周幼兒園很多孩子都不送了,今天班里只有兩個(gè)孩子還在送,老師一臉的不高興,因?yàn)槿绻覀?..
    小白1984閱讀 910評論 20 16
  • 在幼兒園放下小孩之后,就收到幼兒園老師的建議,要盡快離開幼兒園。由于是初次與這些老師接觸,小孩有些怕生,自己跑到一...
    追浪大叔閱讀 522評論 1 6

友情鏈接更多精彩內(nèi)容