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);//通用方法
}
}