MyBatisPlus如何实现自动更新、软删除、乐观锁操作

发布时间:2021-12-30 09:39:50 作者:小新
来源:亿速云 阅读:423

MyBatisPlus如何实现自动更新、软删除、乐观锁操作

1. 引言

MyBatisPlus(简称MP)是MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了许多强大的功能,如自动更新、软删除、乐观锁等,这些功能可以极大地提高开发效率,减少重复代码的编写。本文将详细介绍如何在MyBatisPlus中实现自动更新、软删除和乐观锁操作。

2. MyBatisPlus简介

MyBatisPlus是一个基于MyBatis的增强工具,它提供了许多便捷的功能,如自动生成CRUD代码、分页查询、条件构造器等。MyBatisPlus的核心思想是“简化开发,提高效率”,它通过提供一系列的注解和工具类,使得开发者可以更加专注于业务逻辑的实现,而不需要过多关注底层的SQL操作。

3. 自动更新

3.1 自动更新的概念

自动更新是指在执行插入或更新操作时,自动填充某些字段的值。例如,在插入一条记录时,自动填充创建时间和更新时间;在更新一条记录时,自动填充更新时间。

3.2 实现自动更新的步骤

3.2.1 添加注解

MyBatisPlus提供了@TableField注解,用于标识需要自动填充的字段。常用的自动填充策略有:

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date;

public class User {
    private Long id;
    private String name;
    
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    
    // getter and setter
}

3.2.2 实现MetaObjectHandler

MetaObjectHandler是MyBatisPlus提供的接口,用于处理自动填充逻辑。我们需要实现这个接口,并在insertFillupdateFill方法中定义填充逻辑。

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import java.util.Date;

public class MyMetaObjectHandler implements MetaObjectHandler {
    
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }
    
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }
}

3.2.3 配置MetaObjectHandler

在Spring Boot项目中,可以通过@Component注解将MyMetaObjectHandler注册为Spring Bean。

import org.springframework.stereotype.Component;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    // 同上
}

3.3 自动更新的使用

在配置好自动填充后,执行插入或更新操作时,MyBatisPlus会自动填充相应的字段。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
    public void addUser(User user) {
        this.save(user); // 插入时自动填充createTime和updateTime
    }
    
    public void updateUser(User user) {
        this.updateById(user); // 更新时自动填充updateTime
    }
}

4. 软删除

4.1 软删除的概念

软删除是指在删除一条记录时,并不真正从数据库中删除该记录,而是通过设置一个标志位(如deleted字段)来标记该记录已被删除。这样做的好处是可以保留历史数据,便于后续的数据恢复或审计。

4.2 实现软删除的步骤

4.2.1 添加注解

MyBatisPlus提供了@TableLogic注解,用于标识软删除字段。

import com.baomidou.mybatisplus.annotation.TableLogic;
import java.util.Date;

public class User {
    private Long id;
    private String name;
    
    @TableLogic
    private Integer deleted;
    
    // getter and setter
}

4.2.2 配置全局软删除

在MyBatisPlus的配置文件中,可以配置全局的软删除字段和删除值。

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 软删除字段
      logic-delete-value: 1 # 删除值
      logic-not-delete-value: 0 # 未删除值

4.2.3 配置局部软删除

如果不想使用全局配置,也可以在实体类中通过@TableLogic注解配置局部软删除。

import com.baomidou.mybatisplus.annotation.TableLogic;
import java.util.Date;

public class User {
    private Long id;
    private String name;
    
    @TableLogic(value = "0", delval = "1")
    private Integer deleted;
    
    // getter and setter
}

4.3 软删除的使用

在配置好软删除后,执行删除操作时,MyBatisPlus会自动将deleted字段设置为删除值,而不是真正删除记录。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
    public void deleteUser(Long id) {
        this.removeById(id); // 软删除,设置deleted字段为1
    }
}

5. 乐观锁

5.1 乐观锁的概念

乐观锁是一种并发控制机制,它假设多个事务在大多数情况下不会发生冲突,因此在事务提交时才会检查是否有冲突。如果发现冲突,则回滚事务并重试。乐观锁通常通过版本号或时间戳来实现。

5.2 实现乐观锁的步骤

5.2.1 添加注解

MyBatisPlus提供了@Version注解,用于标识乐观锁字段。

import com.baomidou.mybatisplus.annotation.Version;
import java.util.Date;

public class User {
    private Long id;
    private String name;
    
    @Version
    private Integer version;
    
    // getter and setter
}

5.2.2 配置乐观锁插件

在MyBatisPlus的配置文件中,需要配置乐观锁插件。

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

5.3 乐观锁的使用

在配置好乐观锁后,执行更新操作时,MyBatisPlus会自动检查版本号,如果版本号不一致,则抛出OptimisticLockException异常。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
    public void updateUser(User user) {
        this.updateById(user); // 更新时检查版本号
    }
}

6. 总结

MyBatisPlus提供了自动更新、软删除和乐观锁等强大的功能,这些功能可以极大地简化开发,提高效率。通过本文的介绍,相信读者已经掌握了如何在MyBatisPlus中实现这些功能。在实际开发中,可以根据具体需求灵活运用这些功能,以提高代码的可维护性和可扩展性。

7. 参考资料


以上是关于MyBatisPlus如何实现自动更新、软删除、乐观锁操作的详细介绍。希望本文能够帮助读者更好地理解和使用MyBatisPlus,提高开发效率。

推荐阅读:
  1. ROS软路由的基本操作
  2. spring boot实现软删除的示例代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mybatisplus

上一篇:SpringBoot环境部署遇到的报错问题怎么解决

下一篇:JAVA类加载和多线程怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》