码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 三、MyBatis-Plus 自动填充和乐观锁


    文章目录

    • 1、更新操作
    • 2、自动填充
      • 1.1 数据库修改
      • 1.2 实体类修改
      • 1.3 实现元对象处理器接口
    • 3、乐观锁
      • 3.1 场景
    • 4、乐观锁实现流程
      • 4.1 修改实体类
      • 4.2 创建配置文件
      • 4.3 注册乐观锁插件

    1、更新操作

    注意:update时生成的sql自动是动态sql:UPDATE user SET age=? WHERE id=?

    //修改
    @Test
    public void testUpdate() {
        User user = new User();
        user.setId(1340868235401764865L);
        user.setName("lucymary");
        int count = userMapper.updateById(user);
        System.out.println(count);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2、自动填充

    需求描述:

    项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

    我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作

    1.1 数据库修改

    在User表中添加datetime类型的新的字段 create_time、update_time

    1.2 实体类修改

    实体上增加字段并添加自动填充注解

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;  //create_time
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime; //update_time
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3 实现元对象处理器接口

    注意:不要忘记添加 @Component 注解

    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        //mp执行添加操作,这个方法执行
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("createTime",new Date(),metaObject);
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    
        //mp执行修改操作,这个方法执行
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3、乐观锁

    3.1 场景

    主要适用场景: 当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

    乐观锁实现方式:
    取出记录时,获取当前version
    更新时,带上这个version
    执行更新时, set version = newVersion where version = oldVersion
    如果version不对,就更新失败

    接下来介绍如何在Mybatis-Plus项目中,使用乐观锁:

    4、乐观锁实现流程

    4.1 修改实体类

    添加 @Version 注解

    @Version
    private Integer version;
    
    • 1
    • 2

    4.2 创建配置文件

    创建包config,创建文件MybatisPlusConfig.java

    此时可以删除主类中的 @MapperScan 扫描注解

    @Configuration
    @MapperScan("com.atguigu.demomptest.mapper")
    public class MpConfig {
        /**
         * 乐观锁插件
         */
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor() {
            return new OptimisticLockerInterceptor();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.3 注册乐观锁插件

    在 MybatisPlusConfig 中注册 Bean

    /**
    * 乐观锁插件
    */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    return new OptimisticLockerInterceptor();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    npm run dev和npm run serve两个命令的区别
    《Hello Algo》:动画图解引领的数据结构与算法学习之旅
    抱怨身处黑暗,不如提灯前行
    指针笔试题~走近大厂
    评价——灰色关联分析
    [ 云原生之谜 ] 云原生背景 && 定义 && 相关技术详解?
    Profile注解
    uniapp原生插件-YL视频播放器
    【Kotlin】‘name‘ hides member of supertype ‘Enum‘ and needs ‘override‘ modifier
    情人节程序员用HTML网页表白【情人节爱你的代码】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  • 原文地址:https://blog.csdn.net/qq_43102730/article/details/126338867
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号