Mybatis Plus的@TableId标签

本文详细介绍了在实体类中使用@TableId注释定义主键的六种方式,包括数据库自增、用户输入、全局唯一ID等,并深入探讨了雪花算法(SnowFlake)原理及其在ID_WORKER类型中的应用。

这个注释主要用于对应数据库表的实体类中的主键属性。
写法:@TableId(value=“数据库主键字段”,type = IdType.六种类型之一)
例如:@TableId(value=“user_id”,type = IdType.AUTO )

IdType的六种类型

类型解释
AUTO数据库自增ID
NONE数据库未设置主键类型(将会跟随全局)
INPUT用户输入ID(该类型可以通过自己注册自动填充插件进行填充)
ID_WORKER默认的全局唯一ID (idWorker)
UUID全局唯一ID(UUID)
ID_WORKER_STR字符串全局唯一ID(ID_WORKER 的字符串表示)
  1. 当注释为ID_WORKERUUIDID_WORKER_STR且 插入主键为空时,会把对应的主键数据自动填充到对象中去。
  2. 如果没有注释的时候,变量名为id的字段也会是ID_WORKER形式
  3. ID_WORKER是利用了雪花算法
  4. 雪花算法也就是SnowFlake 算法,它是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。
### 关于 MyBatis Plus 中 `@TableField(select = false)` 的用法 `@TableField(select = false)` 是 MyBatis Plus 提供的一个注解属性,用于控制实体类字段在查询操作中的行为。当设置为 `select = false` 时,表示该字段不会被包含在 SQL 查询语句的 SELECT 子句中[^3]。 #### 功能描述 通过将某个字段标记为 `select = false`,可以实现以下功能: - **减少不必要的数据传输**:如果某些字段的数据量较大或者不希望每次查询都返回这些字段,则可以通过此方式优化性能。 - **保护敏感信息**:对于一些可能涉及隐私或安全性的字段(如密码),可以在默认查询时不将其暴露给客户端。 #### 使用场景举例 假设有一个用户表 `User`,其中包含用户名 (`username`) 和密码 (`password`) 字段。为了防止密码泄露,在执行常规查询时可以选择忽略 `password` 字段: ```java @Data public class User { private Long id; @TableField(value = "username", select = true) private String username; @TableField(value = "password", select = false) private String password; } ``` 在此配置下,任何基于 `User` 实体类生成的基础 CRUD 方法都不会自动加载 `password` 字段的内容[^4]。 需要注意的是,尽管设置了 `select = false`,仍然可以通过手动编写自定义 SQL 或者调用特定方法来获取该字段值。因此它仅影响自动化映射逻辑而不完全阻止访问权限。 #### 结合其他框架特性对比分析 虽然上述内容解释了如何利用 MyBatis Plus 来管理不需要参与检索过程的列项;但是从更广泛的角度来看待数据库交互设计模式的话——Spring Data JPA 用户也可以采用类似机制调整其 Repository 层的行为表现形式,比如借助 RowMapper 定义灵活的结果集转换策略 [^1] 。然而两者之间存在显著差异之处在于技术栈选型以及具体语法结构等方面的不同点上。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值