作者:大三的土狗
专栏:MyBatis-Plus
目录
- 前言
 - 
- 1、@TableName
 - 2、@TableId
 - 
- 
- 1)value
 - 2)type
 
 
 - 
 - 3、@TableField
 - 
- 
- 1)exist
 - 2)select
 - 3)fill
 
 
 - 
 - 4、@Version
 - 5、@EnumValue
 - 
- 
- 1)枚举类注解实现
 - 2)接口实现
 
 
 - 
 - 6、@TableLogic
 - 7、@SqlParser
 - 8、@InterceptorIgnore
 - 9、@OrderBy(opens new window)
 
 - 总结
 
前言
现如今注解开发变得非常方便,代码简洁,开发速度大大提高,成为开发的潮流,当然MyBatis-Plus提供了也很多注解,来简化我们的开发,提高我们的开发效率,本文将介绍mybatis-plus常见的注解及使用方法。
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 | 数据库自增 | 
| NONE | MP set 主键,雪花算法实现 | 
| INPUT | 需要开发者手动赋值 | 
| ASSIGN_ID | MP 分配 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
描述:乐观锁注解、标记 @Verison 在字段上
标记乐观锁,通过 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
 
5、@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,逻辑删除实现。

7、@SqlParser
描述:序列主键策略 oracle
属性:value、resultMap
8、@InterceptorIgnore
see 插件主体
9、@OrderBy(opens new window)
描述:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询
属性 类型 必须指定 默认值 描述
总结
以上就是MyBatis-Plus的常用注解,其中1-6最为常见,使用频率较高,很符合开发某些场景,注解开发可以大大节省我们的时间,简化不必要的开发,因此学好注解开发是大势所趋。


