MyBatis-Plus(常用注解)

1、@TableName

@TableName

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

packagecom.example.mybatisplus.entiy;importcom.baomidou.mybatisplus.annotation.TableName;importlombok.Data;@Data@TableName("mp")//表名publicclassUser{privateString id;privateString name;privateString 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(){Useruser= newUser();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)//填充字段privateDate createTime;@TableField(fill = FieldFill.INSERT_UPDATE)//填充字段privateDate updateTime;

~~~

3、MetaObjectHandler

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

~~~

packagecom.example.mybatisplus.handle;importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;importorg.apache.ibatis.reflection.MetaObject;importorg.springframework.stereotype.Component;@ComponentpublicclassMyMetaObjectHandlerimplementsMetaObjectHandler{@OverridepublicvoidinsertFill(MetaObject metaObject){this.setFieldValByName("createTime", System.currentTimeMillis(), metaObject);// 创建时间 或者new Date()this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);// 更新时间}@OverridepublicvoidupdateFill(MetaObject metaObject){this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);// 更新时间}}

~~~

4、Test


4、@Version

@Version

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

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


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

@Versionprivate Integer version;//乐观锁

3、配置类

packagecom.example.mybatisplus.config;importcom.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@Configuration// 声明为配置类publicclassMyConfig{@BeanpublicOptimisticLockerInterceptor optimisticLockerInterceptor(){returnnew OptimisticLockerInterceptor();// 创建一个 OptimisticLockerInterceptor 对象}}

测试:version 1-->2


3、@EnumValue

@EnumValue

1)枚举类注解实现

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

1、设计表


2、实体类添加字段

privateStatusEnum status;//状态    枚举类型

3、创建枚举类

packagecom.example.mybatisplus.enums;importcom.baomidou.mybatisplus.annotation.EnumValue;publicenumStatusEnum {//枚举类  enum类型的类//奖励1  惩罚0reward(1,"奖励"),punishment(0,"惩罚");@EnumValueprivateInteger code;privateString 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# 日志实现类-->打印sqltype-enums-package:com.example.mybatisplus.enums# 实现类所在的包这里

5、测试

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


2)接口实现

importcom.baomidou.mybatisplus.core.enums.IEnum;publicenumSexEnum implements IEnum {        ONE(1,"男"),    TWO(0,"女"),privateInteger code;privateString msg;    AgeEnum(Integer code, String msg) {this.code = code;this.msg = msg;    }@OverridepublicInteger getValue() {returnthis.code;    }}

6、@TableLogic

@TableLogic

映射逻辑删除

1、数据表添加 identification字段


2、实体类添加注解

@TableLogicprivate 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,逻辑删除实现。

你可能感兴趣的:(MyBatis-Plus(常用注解))