MyBatis-Plus(常用注解)

本文详细介绍了MyBatis-Plus中的关键注解,包括@TableName用于映射数据库表名,@TableId设置主键映射,@TableField处理非主键字段,@Version实现乐观锁,@EnumValue用于枚举类型映射,以及@TableLogic进行逻辑删除。通过这些注解,可以高效地进行数据库操作和实体类的字段映射。
摘要由CSDN通过智能技术生成

1、@TableName

@TableName

用法:映射数据库的表名,如果数据库表名与实体类名不一致,用@TableName来映射。

package com.example.mybatisplus.entiy;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("mp")        //表名
public class User {
    private String id;
    private String name;
    private String age;
}

当数据库表名与实体类名不一致,报错如下:

2、@TableId

@TableId

设置主键映射

1)value

  • value 映射主键字段名

2)type

  • type 设置主键类型,主键的生成策略
AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGN_UUID(4),

/** @deprecated */
@Deprecated				#已不推荐
ID_WORKER(3),
/** @deprecated */
@Deprecated				#已不推荐
ID_WORKER_STR(3),
/** @deprecated */
@Deprecated				#已不推荐
UUID(4);
描述
AUTO数据库自增
NONEMP set 主键,雪花算法实现
INPUT需要开发者手动赋值
ASSIGN_IDMP 分配 ID,Long、Integer、String
ASSIGN_UUID分配 UUID,Strinig
  • INPUT 如果开发者没有手动赋值,则数据库通过自增的方式给主键赋值,如果开发者手动赋值,则存入该值。

  • AUTO 默认就是数据库自增,开发者无需赋值。

  • ASSIGN_ID MP 自动赋值,雪花算法。

  • ASSIGN_UUID 主键的数据类型必须是 String ,自动生成 UUID 进行赋值。

例如:

编写测试类

@Test
    void save(){
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        userMapper.insert(user);
    }

Id成功按策略插入成功

3、@TableField

@TableField

映射 非主键 字段,value 映射字段名

例如:

当字段名与数据库字段名不一致时,报错如下:

正确写法:

1)exist

  • exist 表示是否为数据库字段 false,如果实体类中的成员变量在数据库中没有对应的字段,则可以使用 exist,VO、DTO

当添加数据库没有的字段时,报错如下:

加上@TableField(exist = false),表示在数据库中没有对应的字段,即可查询成功。

2)select

  • select 表示是否查询该字段

3)fill

  • fill 表示是否自动填充,如create_time、update_time

1、增加字段

2、扩充实体类

@TableField(fill = FieldFill.INSERT)        //填充字段
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)         //填充字段
    private Date updateTime;

3、MetaObjectHandler

创建MyMetaObjectHandler类 implements MetaObjectHandler,重写两个方法。

package com.example.mybatisplus.handle;

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

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", System.currentTimeMillis(), metaObject);   // 创建时间 或者new Date()
        this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);   // 更新时间
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);   // 更新时间
    }
}

4、Test

4、@Version

@Version

标记乐观锁,通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成立的时候才会修改成功。

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

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

@Version
    private Integer version;                //乐观锁

3、配置类

package com.example.mybatisplus.config;

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

@Configuration      // 声明为配置类
public class MyConfig {

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();                       // 创建一个 OptimisticLockerInterceptor 对象
    }

}

测试:version 1-->2

3、@EnumValue

@EnumValue

1)枚举类注解实现

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

1、设计表

2、实体类添加字段

private StatusEnum status;              //状态    枚举类型

3、创建枚举类

package com.example.mybatisplus.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;

public enum StatusEnum {        //枚举类   enum类型的类

    //奖励1  惩罚0
    reward(1,"奖励"),punishment(0,"惩罚");

    @EnumValue
    private Integer code;
    private String msg;

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

4、application.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl     # 日志实现类  -->打印sql

  type-enums-package:
    com.example.mybatisplus.enums        # 实现类所在的包		这里

5、测试

查询id为1、2,其对应status分别为1、0

2)接口实现

import com.baomidou.mybatisplus.core.enums.IEnum;

public enum SexEnum implements IEnum<Integer> {
    
    ONE(1,"男"),
    TWO(0,"女"),

    private Integer code;
    private String msg;

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

    @Override
    public Integer getValue() {
        return this.code;
    }
}

6、@TableLogic

@TableLogic

映射逻辑删除

1、数据表添加 identification字段

2、实体类添加注解

@TableLogic
    private Integer identification;         //是否删除标识

3、application.yml 添加配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl     # 日志实现类  -->打印sql

  type-enums-package:
    com.example.mybatisplus.enums        # 实现类所在的包
  global-config:
    db-config:
      logic-not-delete-value: 0     # 逻辑删除的值
      logic-delete-value: 1         # 逻辑删除的值

4、测试

删除id为2的User,identification标识 0-->1

再次查询数据库,查不到id为2的User,逻辑删除实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值