具体步骤:
- 在数据库相应表中加入将要自动填充的目标字段。
- 在POJO的对应字段上加上注解
@TableField(fill = FieldFill.INSERT)
- 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
(注意: 要在类上添加了@Component
) - 当进行添加或更新操作即发生相应的自动填充操作。
具体实现
在MyBatis-Plus入门案例基础上进行修改。
在数据库相应表中加入将要自动填充的目标字段。
在POJO的对应字段上加上注解@TableField(fill = FieldFill.INSERT)
package com.example.mybatis_plus_demo.entity;
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.Data;
import java.util.Date;
@Data
public class User {
//@TableId(type = IdType.ID_WORKER) mp自带策略,生成19位值,数字类型使用这种策略,比如long
//@TableId(type = IdType.ID_WORKER_STR) mp自带策略,生成19位值,字符串类型使用这种策略
//@TableId(type = IdType.INPUT) 设置id值
//@TableId(type = IdType.UUID) 随机唯一值
@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;
}
实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
(注意: 要在类上添加了@Component
)
package com.example.mybatis_plus_demo.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//使用mybatis-plus实现添加操作,这个方法执行
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//使用mybatis-plus实现修改操作,这个方法执行
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
当进行添加或更新操作即发生相应的自动填充操作。
package com.example.mybatis_plus_demo;
import com.example.mybatis_plus_demo.entity.User;
import com.example.mybatis_plus_demo.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisPlusDemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void findAll() {
List<User> users = userMapper.selectList(null);
System.out.println(users);
}
@Test
void addUser() {
User user = new User();
user.setName("nike");
user.setAge(30);
user.setEmail("lucy@qq.com");
int insert = userMapper.insert(user);
System.out.println("insert:" + insert);
}
@Test
void updateUser() {
User user = new User();
user.setId(1371994629343391747L);
user.setAge(120);
int i = userMapper.updateById(user);
System.out.println("update: "+i);
}
}
在执行测试用例addUser
和测试用例updateUser
后,自动填充了日期字段: