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