MyBatis Plus(二) 常用注解

本文详细介绍了MybatisPlus中的关键注解,如@TableId、@TableName、@TableField、@Version、@EnumValue和@TableLogic,涵盖了主键处理、表结构映射、乐观锁、枚举类型映射和逻辑删除。通过实例展示,帮助开发者快速理解和应用这些注解进行数据库操作优化。
摘要由CSDN通过智能技术生成

常用注解

@TableName :映射数据库的表名

package com.weiruan.cn.mybatisplus.entity;

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

@Data
@TableName(value="t_user")
public class User {
    private Long id;
    private String username;
    private String password;
}

@TableId :映射数据库表中的主键

  • value属性映射主键字段名
  • type属性 设置主键类型,主键的生成策略
AUTO(0),        // 数据库自增  开发者无需赋值  赋值也无效(不会存进数据库)
NONE(1),		// MybatisPlus 随机生成主键,雪花算法实现(默认)
INPUT(2),		// 需要开发者手动赋值 如果开发者没有手动赋值,数据库通过自增的方式给主键赋值
ASSIGN_ID(3),	// MybatisPlus 分配ID ,Long、Integer、String   自动赋值,雪花算法
ASSIGN_UUID(4); // 分配UUID String类型  主键类型必须是String,自动生成String类型的UUID

@TableField :映射数据库表中非主键

  • value属性映射的是字段名
  • exist 表示是否为数据库字段 false(表示查询时候忽略此字段,默认为true,在VO、DTO中常使用)
  • select属性 select=false 表示查询时不会再查询此字段
  • fill 表示是否自动填充,将对象存入数据库的时候,由Mybatis Plus自动给某些字段赋值(常用于时间的赋值 create_time、update_time)

​ 1.给表中添加create_time、update_time字段

​ 2.实体类中添加成员变量

package com.weiruan.cn.mybatisplus.entity;

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

import java.util.Date;

@Data
@TableName("t_user")
public class User {
    @TableId
    private Integer id;
    private String username;
    private String password;
    @TableField(fill = FieldFill.INSERT)
    private Date creatTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

​ 3.创建自动填充处理器

package com.weiruan.cn.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作为条件,当条件成立的时候才会修改成功。

​ 1.给数据库表添加version字段,默认值为1

​ 2.实体类添加version成员变量,并添加这个注解

package com.weiruan.cn.mybatisplus.entity;

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

import java.util.Date;

@Data
@TableName("t_user")
public class User {
    @TableId
    private Integer id;
    private String username;
    private String password;
    @TableField(fill = FieldFill.INSERT)
    private Date creatTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private Integer version;
}

​ 3.注册配置类

package com.weiruan.cn.mybatisplus.config;

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

@Configuration
public class MybatisPlusConfig {

    @Bean
    public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor(){
        return new OptimisticLockerInnerInterceptor();
    }
}

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

第一种方式:注解形式

1.数据库中增加枚举类型字段 status ,并创建枚举类

package com.weiruan.cn.mybatisplus.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;

public enum StatusEnums {
    WORK(1,"上班"),
    REST(0,"休息");

    @EnumValue
    private Integer code;
    private String msg;

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

2.实体类中添加枚举成员变量

package com.weiruan.cn.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.weiruan.cn.mybatisplus.enums.StatusEnums;
import lombok.Data;

import java.util.Date;

@Data
@TableName("t_user")
public class User {
    @TableId
    private Integer id;
    private String username;
    private String password;
    @TableField(fill = FieldFill.INSERT)
    private Date creatTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private Integer version;    // 跟数据库名保持一直
    private StatusEnums status; // 枚举的成员变量名一定要保持跟数据库一直

}

3.application.yml中配置枚举包

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-enums-package: com.weiruan.cn.mybatisplus.enums

第二种方式:

package com.weiruan.cn.mybatisplus.enums;

import com.baomidou.mybatisplus.annotation.IEnum;

public enum StatusEnumss  implements IEnum<Integer> {
    WORK(1,"上班"),
    REST(0,"休息");
    
    private Integer code;
    private String msg;

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

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

@TableLogic : 映射逻辑删除

1.数据表添加 deleted字段

2.实体类添加注解

package com.weiruan.cn.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.weiruan.cn.mybatisplus.enums.StatusEnums;
import lombok.Data;

import java.util.Date;

@Data
@TableName("t_user")
public class User {
    @TableId
    private Integer id;
    private String username;
    private String password;
    @TableField(fill = FieldFill.INSERT)
    private Date creatTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Version
    private Integer version;    // 跟数据库名保持一直

    private StatusEnums status; // 枚举的成员变量名一定要保持跟数据库一直

    @TableLogic
    private Integer deleted;

}

3.application.yml 中添加配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-enums-package: com.weiruan.cn.mybatisplus.enums
  global-config:
    db-config:
      logic-not-delete-value: 0
      logic-delete-value: 1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值