Mybatis-Plus:CRUD拓展系列(主键生成策略,自动填充,乐观锁)

1.常用主键生成策略

Mybatis-Plus:常用的主键增长策略:1.默认IdType.ID_WORKER--基于雪花算法实现的用户唯一id生成策略;2.IdType.AUTO--自动增长策略

  • @TableId 注解的使用:顾名思义,这个注解标注实体类中字段对应数据库中表的主键字段;当使用默认策略(雪花算法)特别注意自动生成主键是Long型;当使用AUTO自动增长策略,要注意数据库设计中主键列也必需为自动增长
  • 默认策略
    // 默认全局唯一id 雪花算法自动生成(默认) 
    @TableId(type = IdType.ID_WORKER)
    private Long id;
  • 自动增长
    // AUTO: 自动增长
    @TableId(type = IdType.AUTO)
    private Long id;

`
主键自动增长

2.自动填充插件

前言:阿里开发手册中提及数据库建表所有表中需包含:gmt_create(记录创建时间) 和 gmt_modified(记录修改时间)两个字段,这两个字段应该是自动化添加修改

  • 实体类字段中添加 @TableField 注解
    // 字段在 插入时操作
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;

    // 字段在 插入和更新时 操作
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;
  • 编写源数据处理器 实现 MetaObjectHandler 注意注入ioc容器中
package com.ht.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 源数据处理器
 */
@Slf4j
@Component // 将处理器 加入 ioc容器中 Spring托管
public class MyMetaObjectHandler implements MetaObjectHandler {

    // 插入数据时的策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("插入数据处理: ......");
        // 为字段填充值 实体类字段名 值
        this.setFieldValByName("gmtCreate",new Date(),metaObject);
        this.setFieldValByName("gmtModified",new Date(),metaObject);
    }

    // 更新数据时的策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("更新数据处理: ......");
        // 为字段更新值
        this.setFieldValByName("gmtModified",new Date(),metaObject);
    }
}
前端展示

3.乐观锁处理

前言:乐观锁,对任何操作不加锁处理,直到出现问题再次更新测试,具体实现参照官网

  • 进一步解释乐观锁处理过程:
    1.先查询 获得当前版本号
    2.执行更新时 要 带入version,只有当前更新记录的版本号 与 第一步查询的版本号一致时 才可以更新
    3.如果 第一步version 与 第二步 version不一致 更新失败
    4.执行更新 版本号 改变+1

实际操作:即实现线程安全;A线程 更新一条记录;在执行过程中 B线程率先完成更新记录(版本号改变);此时A线程第一步查询的版本号 与 当前要更新记录的版本号 已经不一致更新失败。

  • 实体类 版本号字段增加 @version注解
    // 乐观锁 处理 版本号
    @Version
    private Integer version;
  • 编写配置类 注册乐观锁插件
package com.ht.config;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration // 配置类
@EnableTransactionManagement // 开启事务
@MapperScan("com.ht.mapper") // 扫描Mapper
public class MyBatisPlusConfig {
    // 注册乐观锁插件 拦截器
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
}

~ 后续:结合前端借用Mybatis-Plus中的分页插件 实现分页查询...

~ 实现效果:
记录分页-1
记录分页-2
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • MybatisPlus 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会...
    njitzyd阅读 539评论 0 0
  • MyBatis Plus 本文档基于 MyBatis-Plus 官方文档编写,详情请参见 MyBatis-Plus...
    青丶空阅读 2,067评论 3 17
  • 今天完成了MyBatis-Plus(以下简称MP)的学习,深入了解了MP的特性和使用方式 1、主键生成策略 自动增...
    Kitor_Summer阅读 202评论 0 0
  • 简介 什么是MyBatis-Plus? MyBatis-Plus(以下简称MP),为简化开发而生。MP是一个MyB...
    勿念及时雨阅读 306评论 0 2
  • 夜莺2517阅读 127,664评论 1 9