MyBatis-Plus(二、常用注解)

简介: MyBatis-Plus 常用注解,如乐观锁、枚举类、逻辑删除等都可以用注解形式来实现,来简化我们的开发,提高我们的开发效率,本文将介绍mybatis-plus常见的注解及使用方法。

1、@TableName

@TableName

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

packagecom.example.mybatisplus.entiy;
importcom.baomidou.mybatisplus.annotation.TableName;
importlombok.Data;
@Data@TableName("mp")        //表名publicclassUser {
privateStringid;
privateStringname;
privateStringage;
}

image-20220814124737095.png

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

image-20220814125159296.png

2、@TableId

@TableId

设置主键映射

1)value

  • value 映射主键字段名

image-20220814131224020.png

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 进行赋值。

例如:

image-20220814131348548.png

编写测试类

 

@Testvoidsave(){
Useruser=newUser();
user.setName("张三");
user.setAge(20);
userMapper.insert(user);
    }

Id成功按策略插入成功

image-20220814131647213.png

3、@TableField

@TableField

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

例如:

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

image-20220814125405528.png

正确写法:

image-20220814130124773.png

1)exist

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

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

image-20220814132535332.png

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

image-20220814132701550.png

2)select

  • select 表示是否查询该字段

image-20220814133146310.png

3)fill

  • fill 表示是否自动填充,如create_time、update_time
1、增加字段

image-20220814133707165.png

2、扩充实体类

 

@TableField(fill=FieldFill.INSERT)        //填充字段privateDatecreateTime;
@TableField(fill=FieldFill.INSERT_UPDATE)         //填充字段privateDateupdateTime;
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(MetaObjectmetaObject) {
this.setFieldValByName("createTime", System.currentTimeMillis(), metaObject);   // 创建时间 或者new Date()this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);   // 更新时间    }
@OverridepublicvoidupdateFill(MetaObjectmetaObject) {
this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);   // 更新时间    }
}
4、Test

image-20220814140703876.png

4、@Version

@Version

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

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

image-20220814142522586.png

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

 

   

@VersionprivateIntegerversion;                //乐观锁

3、配置类

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

测试:version  1-->2

image-20220814143151090.png

3、@EnumValue

@EnumValue

1)枚举类注解实现

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

1、设计表

image-20220814143720242.png

2、实体类添加字段

privateStatusEnumstatus;              //状态    枚举类型

3、创建枚举类

packagecom.example.mybatisplus.enums;
importcom.baomidou.mybatisplus.annotation.EnumValue;
publicenumStatusEnum {        //枚举类   enum类型的类//奖励1  惩罚0reward(1,"奖励"),punishment(0,"惩罚");
@EnumValueprivateIntegercode;
privateStringmsg;
StatusEnum(Integercode, Stringmsg) {
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

image-20220814144901257.png

2)接口实现

importcom.baomidou.mybatisplus.core.enums.IEnum;
publicenumSexEnumimplementsIEnum<Integer> {
ONE(1,"男"),
TWO(0,"女"),
privateIntegercode;
privateStringmsg;
AgeEnum(Integercode, Stringmsg) {
this.code=code;
this.msg=msg;
    }
@OverridepublicIntegergetValue() {
returnthis.code;
    }
}

6、@TableLogic

@TableLogic

映射逻辑删除

1、数据表添加 identification字段

image-20220814145458490.png

2、实体类添加注解

@TableLogicprivateIntegeridentification;         //是否删除标识

3、application.yml 添加配置

mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#日志实现类-->打印sqltype-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

image-20220814145912120.png

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

image-20220814150108889.png

相关文章
|
6月前
|
SQL XML Java
【mybatis】第二篇:@Select注解中加入字段判断
【mybatis】第二篇:@Select注解中加入字段判断
|
8天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
18天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
52 5
|
18天前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
39 3
|
24天前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
105 3
|
23天前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
41 1
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
SQL Java 数据库
5、Mybatis-Plus 常用注解
这篇文章详细介绍了Mybatis-Plus中常用的注解,包括解决实体类与数据库表名不一致、字段不匹配的问题,主键生成策略的配置,以及逻辑删除的实现方法。
5、Mybatis-Plus 常用注解
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。