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中的分页插件 实现分页查询...


网友评论