使用MybatisPlus 如何实现自动填充功能
MybatisPlus是Mybatis的加强版,提供了很多自动化操作,可以大幅度提高开发效率。自动填充功能就是MybatisPlus的一项强大功能之一。
自动填充功能指的是在插入和更新数据时,自动填充预设字段数据。例如在插入日志表时,自动填充创建时间和更新时间字段,而不需要手动进行赋值。
下面我们就来学习如何使用MybatisPlus实现自动填充功能。
1. 新建一个实体类,继承Model类。定义预设字段及对应的get和set方法。
例如:我们定义一个User实体类,它包含了自动生成ID和创建时间两个字段。
public class User extends Model<User> {
private Long id;
private String name;
private String password;
private LocalDateTime createTime;
@Override
protected Serializable pkVal() {
return this.id;
}
//getter和setter方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
}
2. 定义自动填充器类。我们在这个类中实现BeforeInsert和BeforeUpdate两个方法,分别进行插入和更新操作前的自动填充逻辑。
例如:我们定义一个UserMetaHandler类,它包含了自动生成ID和创建时间两个字段的自动填充逻辑。
@Component
public class UserMetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, now);
}
@Override
public void updateFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, now);
}
}
3. 在MybatisPlus的全局配置文件中配置自动填充器类。我们在这个配置文件中设置自动填充器类所在的包路径,并将它注入到全局配置中。
例如:我们在application.yml文件中设置自动填充器类所在的包路径,以及将它注入到全局配置中。
mybatis-plus:
global-config:
db-config:
meta-object-handler: com.example.demo.handler.UserMetaHandler
4. 测试自动填充功能。我们通过一下方式测试自动填充功能是否正常:
在UserMapper接口中定义插入和更新方法,用来测试自动填充功能。
例如:我们在UserMapper中定义一个insertUser方法和updateUser方法,用来测试自动填充功能。
@Mapper
public interface UserMapper extends BaseMapper<User> {
int insertUser(User user);
int updateUser(User user);
}
在UserController中进行插入和更新操作,测试自动填充是否正常。
例如:我们在UserController中进行插入和更新操作,以测试自动填充是否正常。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@PostMapping("/add")
public String addUser(User user) {
int rows = userMapper.insertUser(user);
return "添加成功";
}
@PostMapping("/update")
public String updateUser(User user) {
int rows = userMapper.updateUser(user);
return "更新成功";
}
}
插入和更新测试代码:
User user = new User();
user.setName("test");
user.setPassword("123456");
userMapper.insertUser(user);
user.setPassword("654321");
userMapper.updateUser(user);
测试结果:
插入成功,createTime字段自动填充了当前时间。更新成功,updateTime字段自动填充了当前时间。
自动填充功能已经成功实现。
总结:
MybatisPlus自动填充功能是非常强大和实用的功能之一。通过配置自动填充器类,在插入和更新数据时,预设的字段会自动填充预设的数据,大大提高了开发效率。
