MybatisPlus常用注解

介绍MybatisPlus常用注解的使用。

常用注解

注解名称作用
@TableName(value =" ")映射数据库的表名
@TableId(value =" ")设置主键映射,value 映射主键字段名
@TableField(value =" ")设置⾮主键映射,value映射字段名
@Version标记乐观锁,通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成立的时候才会修改成功
@EnumValue枚举类注解,通用枚举类注解,将数据库字段映射成实体类的枚举类型成员变量

@TableName

映射数据库的表名,项目跑起来时会根据设置的映射到数据库查询相应的表名。

@TableName(value = "user")
public class Account {
    private Integer id;
    private String name;
    private Integer age;
}

结果:
在这里插入图片描述

TableId

设置主键映射,value 映射主键字段名,type设置主键类型,主键的⽣成策略

type包含几个属性:

AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGNUUID(4)
属性名作用
AUTO数据库自增
NONEMPset主键,雪花算法实现
INPUT需要手动赋值
ASSIGN_IDMP 分配 ID,Long、Integer、String
ASSIGN_UUID分配 UUID,Strinig
  • AUTO 就是数据库的自增
  • NONE 给主键赋值,采用随机生成的方法
  • INPUT 如果没有手动赋值,则数据库通过自增的方式给主键赋值(如果上面的id是随机生成的,则以此自增),如果手动赋值,则存入该值。
  • ASSIGN_ID MP 自动赋值,雪花算法。
  • ASSIGN_UUID 主键的数据类型必须是 String,自动生成 UUID 进行赋值
@TableName(value = "user")
public class Account {
    @TableId	//默认的话相当于type = IdType.NONE,主键自动生成
    private Integer id;
    private String name;
    private Integer age;
}

需要注意的是:

采用自动生成id的雪花算法会产生一个随机的值,非常大,id类型要改成long类型,否则会错误

这里采用Integer类型插入一条数据:

@Test
    void save(){
        User user = new User();
        user.setName("赵六");
        user.setAge(20);
        mapper.insert(user);
    }

报错信息:
在这里插入图片描述
改成long类型再执行:
在这里插入图片描述

@TableField

属性描述
exist表示是否为数据库字段
select表示是否查询该字段
fill表示是否⾃动填充,将对象存⼊数据库的时候,由MP⾃动给某些字段赋值
  • exist 表示是否为数据库字段,如果实体类中的成员变量在数据库中没有对应的字段,则可以使⽤ exist=false表示
  • fill 表示是否⾃动填充,将对象存⼊数据库的时候,由MyBatis Plus ⾃动给某些字段赋值(fill = FieldFill.XX),比如create_time、update_time这些字段在创建时设置
FieldFill属性描述
DEFAULT不加任何动作
INSERT第一次创建的时候赋值
UPDATE数据更新的时候赋值
INSERT_UPDATE设置第一次创建和更新时都赋值
@TableField(fill = FieldFill.INSERT)
    private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) 
    private Date updateTime;

对于fill的赋值,mybatisplus提供了专门的处理器:

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

@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);
    }
}

@Version

标记乐观锁(处理并发,防止数据错乱),通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成⽴的时候才会修改成功。

数据修改成功时会同时修改version的字段:

线程 1:update … set version = 2 where version = 1
线程 2 :update … set version = 2 where version = 1

当一个线程结束后version已经变成2了,所以另一个线程就无法修改了。

操作步骤:

1、 数据库表添加 version 字段,默认值为 1

2、 实体类添加 version 成员变量,并且添加 @Version

@Version
private Integer version;

3、 添加配置类

package com.czq.mybatisspi.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){	//乐观锁拦截器
        return new OptimisticLockerInterceptor();
    }
}

@EnumValue

通⽤枚举类注解,将数据库字段映射成实体类的枚举类型成员变量

实体类变量:

 @EnumValue
 private StatusEnum status;

创建枚举类:

package com.czq.mybatisspi.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;

public enum StatusEnum {	//类改成枚举类型
    BOY(1,"男生"),    
    GRIL(0,"女生");  

    @EnumValue	//添加枚举值注解,MP会自动映射
    private Integer code;
    private String msg;

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

配置文件中,添加配置:

mybatis-plus:
  type-enums-package: com.czq.mybatisspi.enums

@TableLogic

映射逻辑删除,就是表面上看删除信息了,但是数据库的信息并不会删除掉。

操作步骤

1、数据表添加 deleted 字段

2、实体类添加注解

@TableLogic
private Integer deleted;

3、application.yml 添加配置

global-config:
  db-config:
  logic-not-delete-value: 0		#deleted字段为“0”,不删除
  logic-delete-value: 1			#deleted为1删除

这样就可以操作了,执行删除操作会显示执行成功,但是数据库数据并没有删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值