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

你可能感兴趣的:(Mybatis-Plus:CRUD拓展系列(主键生成策略,自动填充,乐观锁))