我是靠谱客的博主 如意百褶裙,最近开发中收集的这篇文章主要介绍Mybatis-plus的自动填充功能,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在做项目的时候,一般数据库中的某些字段,例如创建时间(create_time)以及修改时间(update_time)都是自动化完成的,我们不希望手动更新。
阿里巴巴开发手册里面有一句关于数据库的声明:
所有的数据库表都必须包含两个字段gmt_create和gmt_modified,因为我们需要追踪这个数据什么创建,什么时候被修改的,而且需要自动化!
下面我将介绍两种方式实现自动填充;

1.数据库级别

1.在数据库表中新增字段

打开SQLyog,在已有的数据库表(user)中添加create_time和update_time字段,不仅如此,我们需要设置数据类型为datetime,以及默认值为CURRENT_TIMESTAMP,另外还需要在更新时间那一栏勾选上自动更新操作。
在这里插入图片描述

2.同步更新pojo实体类

@TableId(type = IdType.AUTO)
这个注解主要是为了实现id主键的自增;

package com.xing.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    //对应数据库中的主键(uuid 自增id 雪花算法 redis zookeeper)
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Date createTime; //创建时间
    private Date updateTime; //更新时间
}

3.测试更新操作

在测试里面利用UserMapper,并自动注入Spring容器,而UserMapper继承自BaseMapper;

//测试更新
  //继承了BaseMapper 所有的方法都来自于父类,我们也可以编写自己的扩展方法
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testUpdate(){
        User user = new User();
        //通过条件自动拼接sql
        user.setName("Tom");
        user.setAge(19);
        userMapper.updateById(user);
    }

2.代码级别

由于在公司里面数据库一旦创建时不予许修改的,所以我们就需要了解并掌握代码级别的自动填充;

1.删除数据库里面的默认值

删除后的结果如下所示:
在这里插入图片描述

2.在实体类的字段属性增加注解

在create_time上面添加注解 @TableField(fill = FieldFill.INSERT)表示在插入数据的时候自动填充字段;
在update_time上面添加注解@TableField(fill = FieldFill.INSERT_UPDATE)表示在插入以及更新的时候自动填充字段

package com.xing.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    //对应数据库中的主键(uuid 自增id 雪花算法 redis zookeeper)
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    //字段添加填充内容
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

3.编写处理器来处理注解

在当前项目主路径建立一个handler软件包,在里面创建MyMetaObjectHandler类,并实现MetaObjectHandler接口;
使用@Component,将此处理器价值啊到IOC容器中
使用@Slf4j ,开启log4j日志功能

package com.xing.handler;

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

import java.util.Date;

@Component //一定不要忘记把处理器加到IOC容器中
@Slf4j //开启Log4j日志
public class MyMetaObjectHandler  implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill..");
        //第一个参数 字段名 
        //第二个参数 值
        //第三个参数 metaObject
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
	//更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill..");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

4.测试插入和更新

 //测试插入
    @Test
    public void testInsert(){
        User user=new User();
        user.setName("Jack");
        user.setEmail("12138");
        user.setAge(18);
        userMapper.insert(user);
    }

    //测试更新
    @Test
    public void testUpdate(){
        User user = new User();
        //通过条件自动拼接sql
        user.setName("Tom");
        user.setAge(19);
        userMapper.updateById(user);
    }

注意,这里的UserMapper里面的测试方法都是通过Mybatis-plus自动生成的,并不需要手写,有兴趣的小伙伴可以去看我的Mybatisplus快速入门,相信我,一定你接触了Mybatis-plus,你一定会爱上它的。
Mybatis-plus快速入门

最后

以上就是如意百褶裙为你收集整理的Mybatis-plus的自动填充功能的全部内容,希望文章能够帮你解决Mybatis-plus的自动填充功能所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部