下面我将详细讲解 MyBatis-Plus 逻辑删除和字段自动填充的实现攻略。
什么是 MyBatis-Plus
首先,MyBatis-Plus 是 MyBatis 的增强工具包,提供了许多实用的功能,如分页、逻辑删除和字段自动填充等。
逻辑删除的实现
配置逻辑删除插件
- 导入 MyBatis-Plus 的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
- 配置逻辑删除插件
在 Spring Boot 启动类中新增 MybatisPlusConfig
类,并在这个类中配置逻辑删除插件:
@Configuration
public class MybatisPlusConfig {
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setSqlInjector(sqlInjector());
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
return globalConfig;
}
}
其中,LogicSqlInjector
是 MyBatis-Plus 提供的逻辑删除插件,MyMetaObjectHandler
是用于处理逻辑删除字段的值的。
创建实体类
在实体类中,需要声明一个字段作为逻辑删除字段,并在这个字段上加上 @TableLogic
注解来指定列名和删除标记值(删除标记值在实际项目中可以根据需要自定义)。
示例实体类:
@Data
@TableName(value = "user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
@TableLogic(value = "0", delval = "1")
private Integer deleted;
}
使用逻辑删除
在使用 MyBatis-Plus 提供的 CRUD 操作时,可以直接使用 logicDelete
方法来执行逻辑删除操作。
示例代码:
// 删除 deleted 值为 0 的记录
int count = userMapper.delete(new QueryWrapper<User>().eq("deleted", 0));
// 查询 deleted 值为 0 的记录
List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("deleted", 0));
字段自动填充的实现
字段自动填充是指在进行插入或更新操作时,根据一定的规则自动填充某些字段的值。
配置字段自动填充
- 实现
MetaObjectHandler
接口
首先需要实现 MetaObjectHandler
接口,并把它注册到 MyBatis-Plus 的全局配置中。
示例:
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
以上代码中,insertFill
方法用于在插入操作时自动填充创建时间字段的值,updateFill
方法用于在更新操作时自动填充更新时间字段的值。
- 配置全局配置
把上一步实现的自定义 MetaObjectHandler
注册到 MyBatis-Plus 的全局配置中。
示例:
@Configuration
public class MybatisPlusConfig {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
return globalConfig;
}
}
创建实体类
在实体类中,可以声明自动填充的字段,并在这个字段上加上 @TableField
注解来指定列名,并设置 fill
参数为 FieldFill.INSERT
或 FieldFill.UPDATE
。
示例实体类:
@Data
@TableName(value = "user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
}
使用自动填充
使用 MyBatis-Plus 提供的 CRUD 操作时,自动填充的字段会自动填充它们的值。
示例代码:
User user = new User();
user.setName("张三");
userMapper.insert(user); // createTime 字段会自动填充为当前时间
User updateUser = new User();
updateUser.setId(1L);
updateUser.setName("李四");
userMapper.updateById(updateUser); // updateTime 字段会自动填充为当前时间
以上就是 MyBatis-Plus 逻辑删除和字段自动填充的实现攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis-Plus逻辑删除和字段自动填充的实现 - Python技术站