MyBatisPlus02_MyBatisPlus的常用注解



@TableName
用于映射数据库的表名

@TableId
设置主键映射,属性type设置主键的生成策略
共五种生成策略:

AUTO	数据库自增,开发者手动的赋值是无效的

NONE	雪花算法生成随机数(MP的默认生成策略),注:integer类型会因长度不够而无法存储该随机数

INPUT	需要开发者手动赋值,如不赋值,数据库会采用自增方式设置主键

ASSIGN_ID	MP自动通过雪花算法赋值,和默认NONE是一样的

ASSIGN_UUID	自动生成随机字符串进行赋值,要求主键必须为String类型,且不能设置自增

@TableField
设置非主键映射。
属性exist表示该字段是否是数据库字段,若为false则查询数据库时不会查询该字段;
属性select表示查询数据库时是否查询该字段;
属性fill表示是否自动填充(将对象存入数据库时,由MybatisPlus为该字段赋值),需配合自动填充处理器使用,当监听到 INSERT 操作时自动调用 insertFill 方法,监听到 UPDATE 操作时自动调用 updateFill 方法。

@Version
标记乐观锁。通过version字段来保证数据的安全性。保证同时只有一个线程才能修改数据。需要配置乐观锁拦截器。
线程1:update … set version = 2 where version =1
线程2:update … set version = 2 where version =1

@EnumValue
通用枚举类注解。将数据库字段映射成实体类的枚举类型成员变量。
注:需要在配置文件中配置枚举包扫描才能生效!

@TableLogic
映射逻辑删除。步骤如下:

1. 数据库添加 deleted 字段
2. 实体类添加 @TableLogic 注解
3. 在application.yml中添加逻辑删除映射的配置

用法示例:

@Data
@TableName("user")
public class User{
	@TableId(value = "id",type = IdType.INPUT)
	private Integer id;
	@TableField("name")
	private String name;
	@TableField(value = "age", select = false)
	private Integer age;
	@TableField(exist = false)
	private String gender;
	@TableField(fill = FieldFill.INSERT)
	private Date createTime;
	@TableField(fill = FieldFill.INSERT_UPDATE)
	private Date updateTime;
	@Version
	private Integer version;
	@TableLogic
	private Integer deleted;
}
  • 自动填充处理器
package com.blu.handler;

import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

@Component
public class MyMetaObjectHandler implements  MetaObjectHandler{

	@Override
	public void insertFill(MetaObject metaObject) {
		this.setFieldValByName("createTime", new Date(), metaObject);
		this.setFieldValByName("updateTime", new Date(), metaObject);		
	}

	@Override
	public void updateFill(MetaObject metaObject) {
		this.setFieldValByName("updateTime", new Date(), metaObject);
	}
	
}
  • 配置乐观锁拦截器
package com.blu.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;

@Configuration
public class MyBatisPlusConfig {
	
	@Bean
	public OptimisticLockerInterceptor optimisticLockerInterceptor() {
		return new OptimisticLockerInterceptor();
	}

}
  • StatusEnum 枚举类
package com.blu.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;

public enum StatusEnum {
	WORK(1, "工作中"),
	REST(0, "休息中");

	StatusEnum(Integer code, String msg) {
		this.code = code;
		this.msg = msg;
	}

	@EnumValue
	private Integer code;
	private String msg;
}
  • 枚举包扫描的配置
mybatis-plus:
  type-enums-package: com.southwind.mybatisplus.enums
  • 逻辑删除映射的配置
mybatis-plus:
  global-config:
    db-config:
      logic-not-delete-value: 0		#不删除为0
      logic-delete-value: 1		#删除为1
Logo

「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!

更多推荐