MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制

简介: MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制

一、 逻辑删除

  • 删除操作业务问题:业务数据从数据库中丢失
  • 逻辑删除:为数据设置是否可用的状态字段,删除时设置状态字段为不可用状态,数据保存在数据库中。

1.1 数据库表中添加逻辑删除标记字段

1.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段

public class User {
//    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    @TableField(value = "username")
    private String userName;
    @TableField(value = "password",select = false)
    private String passWord;
    private String gender;
    private String addr;
    @TableField(exist = false)
    private Integer online;
    //逻辑删除字段,标记当前记录是否被删除
    //1表示删除,0表示未删除
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;
}

1.3配置逻辑删除字面值

mybatis-plus:
  global-config:
    banner: false
    db-config:
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0

执行SQL语句:UPDATE tb_user SET deleted=1 WHERE id=? AND deleted=0

执行结果:

二、 乐观锁

2.1 数据库表中添加锁标记字段

2.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段

public class User {
//    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    @TableField(value = "username")
    private String userName;
    @TableField(value = "password",select = false)
    private String passWord;
    private String gender;
    private String addr;
    @TableField(exist = false)
    private Integer online;
    //逻辑删除字段,标记当前记录是否被删除
    //1表示删除,0表示未删除
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;
    //实现乐观锁
    @Version
    private Integer version;
}

2.3 配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor() {
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加乐观锁的拦截器
        mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mpInterceptor;
    }
}

2.4 使用乐观锁机制在修改前必须先获取到对应数据的version方可正常进行

void testUpdate() {
    //1.先通过要修改的数据id将当前的数据查询出来
    User user = userDao.selectById(4L);
    //2.将要修改的属性逐一设置进去
    user.setUserName("小小");
    userDao.updateById(user);
  }
  • 执行修改前先执行的查询语句:SELECT id,username,gender,addr,deleted,version FROM tb_user WHERE id=? AND deleted=0
  • 执行修改时使用version字段作为乐观锁检查依据:UPDATE tb_user SET username=?, gender=?, addr=?, version=? WHERE id=? AND version=? AND deleted=0


相关文章
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
7月前
|
SQL Java 数据库连接
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
155 0
|
11月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
10月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
387 4
|
10月前
|
缓存 Java 数据库连接
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
162 1
9、Mybatis-Plus 乐观锁
这篇文章介绍了Mybatis-Plus中乐观锁的实现和使用流程,包括使用场景、在实体类中添加版本号字段、配置乐观锁插件以及通过测试验证乐观锁的效果,确保在并发环境下数据的一致性。
9、Mybatis-Plus 乐观锁
|
XML 前端开发 Java
Mybatis-Plus乐观锁配置
Mybatis-Plus乐观锁配置
225 1
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
603 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
SQL XML Java
MyBatis初探:揭示初始化阶段的核心流程与内部机制
MyBatis初探:揭示初始化阶段的核心流程与内部机制
137 2
MyBatis初探:揭示初始化阶段的核心流程与内部机制
|
SQL Java 数据库连接
深入源码:解密MyBatis数据源设计的精妙机制
深入源码:解密MyBatis数据源设计的精妙机制
260 1
深入源码:解密MyBatis数据源设计的精妙机制