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

2021-01-17  本文已影响0人  掌灬纹

1.常用主键生成策略

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

    // 默认全局唯一id 雪花算法自动生成(默认) 
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    // AUTO: 自动增长
    @TableId(type = IdType.AUTO)
    private Long id;
` 主键自动增长

2.自动填充插件

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

    // 字段在 插入时操作
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;

    // 字段在 插入和更新时 操作
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;
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.乐观锁处理

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

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

    // 乐观锁 处理 版本号
    @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
上一篇下一篇

猜你喜欢

热点阅读