概述
我们在做项目的时候,一般数据库中的某些字段,例如创建时间(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的自动填充功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复