@Data
@Accessors(chain = true)
@TableName("tbl_employee")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String lastName;
private String email;
private String gender;
private Integer age;
//标明该字段是乐观锁的字段
@Version
private Integer version;
//标明该字段是逻辑删除字段
@TableLogic
private Integer deleted;
//自动插入字段
@TableField(fill = FieldFill.INSERT)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime date;
}
@Configuration
public class MybatisPlusConf {
//分页配置
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//防止恶意sql注入
ArrayList<ISqlParser> sqlParsers = new ArrayList<>();
sqlParsers.add(new BlockAttackSqlParser());
paginationInterceptor.setSqlParserList(sqlParsers);
return paginationInterceptor;
}
@Bean//乐观锁插件
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/*
insert时自动填充指定字段
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictUpdateFill(metaObject, "date", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.fillStrategy(metaObject, "date", LocalDateTime.now());
}
/*
update时自动填充指定字段
*/
@Override
public void updateFill(MetaObject metaObject) {
}
}
乐观锁
只有version与表中的值对应, 才能修改数据
@Test
public void testLock(){
Employee employee = new Employee();
employee.setLastName("wanglaowu").setVersion(1);
employeeService.update(employee,new UpdateWrapper<Employee>().eq("id",13));
}
逻辑删除
删除一条数据时, 并不是真正的从表中删除, 而是将表中某一字段值改变
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted #逻辑删除
logic-delete-value: 1 #已删除的值, 默认1
logic-not-delete-value: 0 #未删除的, 默认0
@Test
public void testLogicalDelete(){
employeeService.removeById(13);
}
输出语句
UPDATE tbl_employee SET deleted = 1 WHERE id = ? AND deleted = 0
原文:https://www.cnblogs.com/kikochz/p/12913318.html