千家信息网

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

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,小编给大家分享一下MyBatisPlus如何实现自动更新、软删除、乐观锁操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!快速入门步骤创建数据库,数据表使用SpringBoot导入m
千家信息网最后更新 2025年12月02日MyBatisPlus如何实现自动更新、软删除、乐观锁操作

小编给大家分享一下MyBatisPlus如何实现自动更新、软删除、乐观锁操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

快速入门

步骤

  1. 创建数据库,数据表

  1. 使用SpringBoot导入maven依赖

                                      mysql            mysql-connector-java            8.0.21                                            org.projectlombok            lombok            1.18.12                                                    com.baomidou            mybatis-plus-boot-starter            3.3.2        


  2. 使用了mybatis-plus 之后(区别于mybatis传统方式entity-dao(连接mybatis,配置mapper.xml文件)-service-controller)

    • 实体类:

      @Datapublic class User  {    /**     * 主键ID     */    @TableId(value = "id", type = IdType.AUTO)    private Long id;    /**     * 姓名     */    private String name;    /**     * 年龄     */    private Integer age;    /**     * 邮箱     */    private String email;}


    • mapper接口

      //对应的的Mapper上面继承基本的类 BaseMapper@Repositorypublic interface UserMapper extends BaseMapper {        //通用CRUD操作父类已经写好}


    • 注意点,我们需要在主启动类上去扫描我们的mapper包下的所有接口

      @MapperScan("com.mybatis.mybatis_plus.mapper")

    • 测试类中可以测试:

          @Autowired    private UserMapper userMapper;    @Test    void contextLoads() {        List userList = userMapper.selectList(null);        userList.forEach(System.out::println);    }


自动更新

所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需 要自动化!

1、在表中新增字段 gmt_create、gmt_modified,类型datetime

2、把实体类同步,实体类字段属性上需要增加注解

    @TableField(fill = FieldFill.INSERT)    private Date gmtCreate;    @TableField(fill = FieldFill.INSERT_UPDATE)    private Date gmtModified;

3、编写handler来处理这个注解!

@Slf4j@Component // 注意加到ioc容器中public class MyMetaObjectHandler implements MetaObjectHandler {        // 插入时的填充策略        @Override        public void insertFill(MetaObject metaObject) {            this.setFieldValByName("gmtCreate",new Date(),metaObject);            this.setFieldValByName("gmtModified",new Date(),metaObject);        }        // 更新时的填充策略        @Override        public void updateFill(MetaObject metaObject) {            this.setFieldValByName("gmtModified",new Date(),metaObject);        }}

4、测试插入、测试更新、观察时间即可。

软删除(逻辑删除)

物理删除 :从数据库中直接移除

逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1

1、在数据表中增加一个 deleted 字段

2、实体类中增加属性

    /**     * 是否删除,1已删除,0未删除     */    @TableLogic    private Boolean deleted;

3、配置!

# 配置逻辑删除mybatis-plus.global-config.db-config.logic-delete-value=1mybatis-plus.global-config.db-config.logic-not-delete-value=0

新版本Mybatislus无需一下配置了

    @Bean    public ISqlInjector sqlInjector() {        return new LogicSqlInjector();    }

4、测试一下删除! 记录依旧在数据库,但是值确已经变化了,查询也不会显示被删除的数据!

int i = userMapper.deleteById(2L);System.out.println(i);List userList = userMapper.selectList(null);userList.forEach(System.out::println);
乐观锁

乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题, 再次更新值测试

悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!

我们这里主要讲解 乐观锁机制!

乐观锁实现方式:

  • 取出记录时,获取当前 version

  • 更新时,带上这个version

  • 执行更新时, set version = newVersion where version = oldVersion

  • 如果version不对,就更新失败

    乐观锁:1、先查询,获得版本号 version = 1-- Aupdate user set name = "tom", version = version + 1where id = 2 and version = 1-- B 线程抢先完成,这个时候 version = 2,会导致 A 修改失败!update user set name = "jack", version = version + 1where id = 2 and version = 1


在MyBatisPlus里面使用乐观锁插件

1、给数据添加version字段,整型默认值为1。

2、实体类添加对应字段

    @Version //乐观锁Version注解    private Integer version;

3、注册组件

    // 注册乐观锁插件    @Bean    public OptimisticLockerInterceptor optimisticLockerInterceptor() {        return new OptimisticLockerInterceptor();    }

4、测试

// 测试乐观锁成功!@Testpublic void testOptimisticLocker(){    // 1、查询用户信息    User user = userMapper.selectById(1L);    // 2、修改用户信息    user.setName("Simon");    // 3、执行更新操作    userMapper.updateById(user);}

可以看到更新执行的sql

看完了这篇文章,相信你对"MyBatisPlus如何实现自动更新、软删除、乐观锁操作"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

乐观 更新 数据 测试 字段 实体 数据库 配置 注解 逻辑 问题 查询 悲观 信息 属性 接口 插件 数据表 方式 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京小糖互联网科技有限公司 大拇指软件开发 中国5g网络安全 个人服务器托管 服务器下载东西失败 外贸都是用什么软件开发客户 鹤壁市网络安全协同创新 台达服务器撞机怎么解决 网络技术可以挂靠的证书 中国网络安全审查技术与认证中心证书 软件开发者是道德吗 社交软件开发的注意要点 nba2k22与游戏服务器连接出问题 芜湖苹果手机软件开发前十名 网络技术发展对政府治理 河北雄安归途互联网科技有限公司 宁波果然互联网科技有限公司 亚马逊数据库有用吗 无线传感器网络技术军事应用 服务器远程管理信息 武汉多点以太网络技术 江西戴尔服务器现货价格 云蚁互联网科技有限公司 pyqt5数据库操作界面卡顿 漳平小程序软件开发报价单 计算机网络技术就业心得 网络安全的分析题 数据库中except语法 游戏开发转其他软件开发 网络安全机器守护者
0