Mybatis Plus 常用注解(超详细)
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观
前言
大家好,我是小哈。
本文主要带大家来看下 Mybatis Plus 框架中,使用频率非常高的几个注解及其属性值,因为编写此本教程目的是为了大家快速入门并使用 Mybatis Plus,关于注解更高级的用法请参考官网。
实体类常用注解
@TableName
作用:表名注解,标识实体类对应的表。
使用示例:
/**
* @author: 犬小哈
* @from: 公众号:小哈学Java, 网站:www.quanxiaoha.com
* @date: 2022-12-13 14:13
* @version: v1.0.0
* @description: TODO
**/
@TableName("t_user")
public class User {
/**
* 主键 ID
*/
private Long id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private Integer gender;
}
有没有什么法子可以不用添加 @TableName
注解,让框架自动解析映射?
主要有以下两种方法:
-
当表名和实体类的命名一致时,如表名
user
, 实体类为User
时,可不用添加@TableName
注解,Mybatis Plus 会自动完成映射,不过实际项目中,表名规范规定都会带有前缀。 -
还可以通过全局配置声明表明前缀,比如你的项目里,表名规范全部以
t_
开头,则可以在application.yml
配置文件中添加如下配置,这样就可以不用添加@TableName
注解,MP 会自动拼接:
mybatis-plus:
global-config:
db-config:
table-prefix: t_
@TableId
作用:主键注解。
使用示例:
/**
* @author: 犬小哈
* @from: 公众号:小哈学Java, 网站:www.quanxiaoha.com
* @date: 2022-12-13 14:13
* @version: v1.0.0
* @description: TODO
**/
@TableName("t_user")
public class User {
/**
* 主键 ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private Integer gender;
}
@TableId
注解有两个属性值:
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | "" | 主键字段名 |
type | Enum | 否 | IdType.NONE (默认雪花算法生成 ID) | 指定主键类型 |
@IdType
作用:指定主键 ID 类型。
值 | 描述 |
---|---|
AUTO | 数据库 ID 自增 |
NONE | 未设置主键类型(默认) |
INPUT | 插入数据前,需自行设置主键的值 |
ASSIGN_ID | 分配 ID (主键类型为 Number (Long 和 Integer )或 String )(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID | 分配 UUID ,主键类型为 String (since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认 default 方法) |
ID_WORKER | 分布式全局唯一 ID 长整型类型 (推荐使用 ASSIGN_ID ) |
UUID | 32 位 UUID 字符串 (推荐使用 ASSIGN_UUID ) |
ID_WORKER_STR | 分布式全局唯一 ID 字符串类型 (推荐使用 ASSIGN_ID ) |
@TableField
作用:指定数据库字段注解(非主键)。
假设表的字段名与实体类的字段名不一致,可通过它来指定,比如表字段名为 user_name
映射到实体类的字段 name
上,代码如下:
/**
* @author: 犬小哈
* @from: 公众号:小哈学Java, 网站:www.quanxiaoha.com
* @date: 2022-12-13 14:13
* @version: v1.0.0
* @description: TODO
**/
@TableName("t_user")
public class User {
/**
* 主键 ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 姓名
*/
@TableField("user_name")
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private Integer gender;
}
@TableLogic
作用:逻辑删除注解。
@TableName("t_user")
public class User {
/**
* 主键 ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private Integer gender;
/**
* 逻辑删除
*/
@TableLogic
private Integer isDeleted;
}
具体如何使用,请参阅后续《逻辑删除》 小节,有详细教程。
@Version
作用:乐观锁注解。
@TableName("t_seckill_goods")
public class SeckillGoods {
/**
* 主键 ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 商品名称
*/
private String goodsName;
/**
* 库存
*/
private Integer count;
/**
* 乐观锁版本号
*/
@Version
private Integer version;
}
具体如何使用,请参阅后续《乐观锁》 小节,有详细教程。
结语
本文带着大家快速了解了项目开发中常用的一些实体类注解,希望对小伙伴们有所帮助。