项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

    我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:

    1、实体上添加以下注解 (同个字段上只能使用一个注解):

    • @TableField(fill = FieldFill.UPDATE):只能‘修改’时的自动填充。
    • @TableField(fill = FieldFill.INSERT):只能‘插入’时的自动填充。
    • @TableField(fill = FieldFill.INSERT_UPDATE):‘修改’、‘插入’时都能自动填充字段。 | package com.wzy.bootmtp.pojo;

    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.TableField;
    import lombok.Data;

    @Data//生产get、set、toString等方法的注解
    public class User {
    private Integer id;
    private String name;
    private String age;
    @TableField(fill = FieldFill.INSERT)
    private String email;
    }

    | | —- |

    2、写法一:创建 MyMetaObjectHandler 类 实现,元对象处理 MetaObjectHandler 接口,并实现接口里的 insertFill()updateFill()

    1. package com.wzy.bootmtp.handler;
    2. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    3. import org.apache.ibatis.reflection.MetaObject;
    4. import org.springframework.stereotype.Component;
    5. @Component
    6. public class MyMetaObjectHandler implements MetaObjectHandler {
    7. /*
    8. * @Description: 插入的自动填充
    9. * @Author: WangZiYao
    10. * @Date: 2021/9/8 23:54
    11. */
    12. @Override
    13. public void insertFill(MetaObject metaObject) {
    14. //获取要被填充的字段的值
    15. Object value = getFieldValByName("email", metaObject);
    16. //当字段为空时
    17. if (value == null) {
    18. setFieldValByName("email","wwww@qq.com",metaObject);
    19. }
    20. }
    21. /*
    22. * @Description: 修改的自动填充
    23. * @Author: WangZiYao
    24. * @Date: 2021/9/8 23:54
    25. */
    26. @Override
    27. public void updateFill(MetaObject metaObject) {
    28. //获取要被填充的字段的值
    29. Object value = getFieldValByName("email", metaObject);
    30. //当字段为空时
    31. if (value == null) {
    32. setFieldValByName("email","wwww@qq.com",metaObject);
    33. }
    34. }
    35. }

    写法二:

    1. @Component
    2. public class MyMetaObjectHandler implements MetaObjectHandler {
    3. private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
    4. @Override
    5. public void insertFill(MetaObject metaObject) {
    6. LOGGER.info("start insert fill ....");
    7. this.setFieldValByName("createTime", new Date(), metaObject);
    8. this.setFieldValByName("updateTime", new Date(), metaObject);
    9. }
    10. @Override
    11. public void updateFill(MetaObject metaObject) {
    12. LOGGER.info("start update fill ....");
    13. this.setFieldValByName("updateTime", new Date(), metaObject);
    14. }
    15. }

    测试:

    1. package com.wzy.bootmtp.test;
    2. import com.wzy.bootmtp.mapper.UserMapper;
    3. import com.wzy.bootmtp.pojo.User;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.autoconfigure.SpringBootApplication;
    8. import org.springframework.boot.test.context.SpringBootTest;
    9. import org.springframework.test.context.junit4.SpringRunner;
    10. import java.util.List;
    11. @RunWith(SpringRunner.class)
    12. @SpringBootTest
    13. public class TestSpringBoot {
    14. @Autowired
    15. private UserMapper userMapper;
    16. @Test
    17. public void test1(){
    18. userMapper.insert(new User(null,"张三",25,null));
    19. }
    20. }

    image.png