欢迎访问宙启技术站
智能推送

使用MybatisPlus 如何实现自动填充功能

发布时间:2023-05-15 23:27:19

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自动填充功能是非常强大和实用的功能之一。通过配置自动填充器类,在插入和更新数据时,预设的字段会自动填充预设的数据,大大提高了开发效率。