首页 > 其他 > 详细

mybatis-plus 插件

时间:2020-05-18 22:24:32      阅读:122      评论:0      收藏:0      [点我收藏+]

mybatis-plus 插件

#DO

@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

mybatis-plus 插件

原文:https://www.cnblogs.com/kikochz/p/12913318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!