mybatisplus自动生成id_【mybatis-plus】主键id生成、字段自动填充

本文介绍了MyBatisPlus中主键ID的生成策略,包括数据库自增、UUID、ID_WORKER等,并详细讲解了如何通过@TableId注解进行配置。此外,还探讨了MyBatisPlus的字段自动填充功能,如create_time和update_time,通过@TableField注解和自定义MetaObjectHandler实现自动填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、主键id的生成

数据库表里一般都会有一个主键id,来做为这条数据的惟一标识。redis

常见的方式

数据库自动增加

这种很常见了,能够作到全库惟一。由于id是自然排序的,对于涉及到排序的操做会很方便。算法

UUID

上面的自动增加,虽然简单,可是对于分表这样的操做来讲就比较麻烦。由于你在第二张插入数据的时候,须要拿到上一张表最后一个数据的id。

UUID则不一样,每次都一个随机惟一的值,不过由于是随机,因此也就没有排序了。spring

redis

redis也能够用来生成id,利用redis的原子操做。好处是能够不依赖数据库,性能好,可是随之由于redis的引入,带来了必定的复杂度。数据库

mybatis-plus的方式

其实在以前使用mp进行新增数据的时候,我并无进行对应的配置,默认就会带有主键id。mybatis

对其配置也很简单,在主键上加注解,@TableId(type = IdType.ID_WORKER)app

@Data

public class User {

@TableId(type = IdType.ID_WORKER)

private Long id;

private String name;

private Integer age;

private String email;

@TableField(fill = FieldFill.INSERT)

private Date createTime;

@TableField(fill = FieldFill.INSERT_UPDATE) // 新增的时候update也有值

private Date updateTime;

}

在idea编辑器里,能够按住ctrl+鼠标左击,看到IdType的几个枚举值。编辑器

AUTO:就是利用数据库自增了

NONE:未设置,须要手动设置值

INPUT: 须要手动设置值

UUID:生成UUID类型的主键id

ID_WORKER:生成19位的值,数字类型

ID_WORKer_STR:生成19位的值,字符串类型

关于mp的这个19位值的生成,能够作个了解,利用了snowflake算法。

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。

其核心思想是:使用41bit做为毫秒数,10bit做为机器的ID(5个bit是数据中心,5个bit的机器ID),

12bit做为毫秒内的流水号(意味着每一个节点在每毫秒能够产生 4096 个 ID),最后还有一个符号位,永远是0。分布式

2、mp实现自动填充

在操做数据库的时候还有一种常见操做,就是一些字段的填充,好比常见的create_time、update_time等,填充方式都是相同的。

那么除了每次的手动填充,还能够自动填充。而在MP里设置自动填充只要2步便可:ide

1.添加注解

@TableField(fill = FieldFill.INSERT)、@TableField(fill = FieldFill.INSERT_UPDATE)。性能

@Data

public class User {

@TableId(type = IdType.ID_WORKER)

private Long id;

private String name;

private Integer age;

private String email;

@TableField(fill = FieldFill.INSERT) // 新增的时候填充数据

private Date createTime;

@TableField(fill = FieldFill.INSERT_UPDATE) // 新增或修改的时候填充数据

private Date updateTime;

}

2.自定义实现类 MyMetaObjectHandler

这里须要咱们本身写一个实现类

@Component //此注解表示 将其交给spring去管理

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName("createTime", new Date(), metaObject);

this.setFieldValByName("updateTime", new Date(), metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName("updateTime", new Date(), metaObject);

}

}

对了,要在数据库表里增长对应的字段create_time、update_time。添加后能够试一下了,先来新增一条测试数据:

// 新增

@Test

void addUser() {

User user = new User();

user.setName("老王");

user.setAge(66);

user.setEmail("laowang@123.com");

userMapper.insert(user);

}

执行成功后查看数据库表:

新增的时候,2个字段都填充了时间。

那如今只作更新操做的时候,只会去更新update_time。

// 修改

@Test

void updateUser() {

User user = new User();

user.setId(1342322873243996161L);

user.setName("老王修改后");

userMapper.updateById(user);

}

结果正确。

CentOS 7上安装Qt,可以按照以下步骤进行操作: 1. 首先,确保已经安装了gcc编译器。可以通过在终端执行命令`gcc -v`来检查是否已安装gcc。如果没有安装gcc或者需要更高版本的gcc,可以使用yum来安装或更新gcc。 2. 下载Qt安装包,可以从官方网站上下载相应的版本。然后将安装包解压到指定的目录。 3. 授权安装脚本的执行权限,可以使用`chmod +x filename`命令来给脚本文件添加执行权限。 4. 执行安装脚本,运行`./qt-installer.run`命令来启动可视化安装界面。按照界面提示进行安装,可以选择安装路径和组件。 5. 安装完成后,可以在安装路径下找到Qt的可执行文件,比如`/opt/Qt/Qt5.15.2/Tools/QtCreator/bin/qtcreator`。可以通过命令行或者图形界面启动Qt Creator。 以上是在CentOS 7上安装Qt的一般步骤,具体操作可能会因版本或其他因素而有所不同。建议在安装前仔细阅读相应的安装文档或官方指导,以确保正确安装和配置Qt。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [centos7安装QT及环境配置](https://blog.youkuaiyun.com/m0_57931726/article/details/120180973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Centos7安装Qt](https://download.youkuaiyun.com/download/weixin_38522552/14040126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值