【第19章】MyBatis-Plus自定义ID生成器

文章目录

  • 前言
  • 一、如何自定义
  • 二、Spring Boot 集成
    • 1. 方式一:声明为Bean供Spring扫描注入
    • 2. 方式二:使用配置类
    • 3. 方式三:通过MybatisPlusPropertiesCustomizer自定义
  • 三、Spring 集成
    • 1. 方式一:XML配置
    • 2. 方式二:注解配置
  • 四、与KeyGenerator的差异
  • 总结


前言

MyBatis-Plus 提供了灵活的自定义ID生成器功能,允许开发者根据业务需求定制ID生成策略。从3.3.0版本开始,默认使用雪花算法结合不含中划线的UUID作为ID生成方式。

MyBatis-Plus自带主键生成策略对比

方法主键生成策略主键类型说明
nextIdASSIGN_IDLong,Integer,String支持自动转换为String类型,但数值类型不支持自动转换,需精准匹配,例如返回Long,实体主键就不支持定义为Integer
nextUUIDASSIGN_UUIDString默认不含中划线的UUID生成

一、如何自定义

MyBatis-Plus 提供了多种方式来实现自定义ID生成器,以下是一些示例工程和配置方法。

二、Spring Boot 集成

1. 方式一:声明为Bean供Spring扫描注入

@Component
public class CustomIdGenerator implements IdentifierGenerator {@Overridepublic Long nextId(Object entity) {// 使用实体类名作为业务键,或者提取参数生成业务键String bizKey = entity.getClass().getName();// 根据业务键调用分布式ID生成服务long id = ...; // 调用分布式ID生成逻辑// 返回生成的ID值return id;}
}

2. 方式二:使用配置类

@Bean
public IdentifierGenerator idGenerator() {return new CustomIdGenerator();
}

3. 方式三:通过MybatisPlusPropertiesCustomizer自定义

@Bean
public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {return plusProperties -> plusProperties.getGlobalConfig().setIdentifierGenerator(new CustomIdGenerator());
}

三、Spring 集成

1. 方式一:XML配置

<bean name="customIdGenerator" class="com.example.CustomIdGenerator"/>
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig"><property name="identifierGenerator" ref="customIdGenerator"/>
</bean>

2. 方式二:注解配置

@Bean
public GlobalConfig globalConfig() {GlobalConfig conf = new GlobalConfig();conf.setIdentifierGenerator(new CustomIdGenerator());return conf;
}

四、与KeyGenerator的差异

MyBatis-PlusIdentifierGenerator主要用于生成数据库表的主键ID,而KeyGeneratorMyBatis框架中的一个接口,用于在执行SQL语句时生成键值,通常用于生成自增主键或者在执行INSERT语句后获取新生成的ID。

IdentifierGenerator更加专注于主键ID的生成,而KeyGenerator则更加通用,可以用于多种键值生成场景。在使用MyBatis-Plus时,通常推荐使用IdentifierGenerator来生成主键ID,因为它与MyBatis-Plus的集成更加紧密,提供了更多的便利性和功能。


总结

回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CUDA】 矩阵乘法 matMatMul

矩阵乘法 matMatMul 矩阵乘法是基本线性代数子程序&#xff08;BLAS&#xff09;的重要组成部分&#xff0c;而且线性代数中许多其他操作以此为基础。 图1是两个矩阵的乘法。 基础方法&#xff0c;正方形tile和长方形tile 基础方法 执行矩阵乘法的基础方法是使用单个线程执…

Linux上web服务器搭建(Apache、Nginx)

第五章 web服务器 第一节 DNS&#xff1a;对域名进行解析&#xff0c;查询对应的地址 1.1 web服务器简介 www是world wide web的缩写&#xff0c;也就是全球信息广播的意思 1.2.网址及HTTP简介 web服务器提供的这些数据大部分都是文件&#xff0c;那么我们需要在服务器端…

传统视觉Transformer的替代者:交叉注意力Transformer(CAT)

传统视觉Transformer的替代者:交叉注意力Transformer(CAT) 在深度学习的世界里,Transformer架构以其在自然语言处理(NLP)领域的卓越表现而闻名。然而,当它进入计算机视觉(CV)领域时,却面临着计算成本高昂和推理速度慢的双重挑战。现在,一项革命性的创新——交叉注意…

Qualcomm QCS6490 开发板运行高通AI Hub图像分类程序

相关代码可以在如下链接下载&#xff1a; ai-hub-models/apps/android/ImageClassification at main quic/ai-hub-models GitHub 所用硬件有&#xff1a; 1. UBUNTU20.04 2. 高通QCS6490 开发板 对下载下来的代码进行编译 1. ubuntu环境配置 1. python环境配置 如果你…

[SAP ABAP] 子例程

子例程 示例1 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 示例2 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 补充扩展练习 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 提示…

验证图像传感器性能

文章目录 验证图像传感器性能 验证图像传感器性能 测试类别测试项目具体方法与描述图像质量测试分辨率测试使用分辨率测试卡&#xff08;如1951 USAF分辨率测试卡&#xff09;拍摄图像&#xff0c;分析成像的清晰度。动态范围测试测试传感器在高对比度场景中的表现&#xff0c…

odoo 物联网 设备数据采集方案

图一 架构手稿(许老师专属) 图二 架构简图 部署 方案一&#xff1a; odoo业务数据库与设备采集数据库使用一个instance。 缺点&#xff1a;重启pg服务相互影响。 方案二&#xff1a; odoo业务数据库与设备采集数据库独立部署&#xff0c;使用两个instance。 优点&#xff1a;…

RedHat / CentOS安装FTP服务

本章教程,记录在RedHat / CentOS中安装FTP的具体步骤。FTP默认端口:21 1、安装 epel 源 yum install -y epel-release2、安装 pure-ftpd yum -y install pure-ftpd3、修改默认配置 # 默认配置位于 /etc/pure-ftpd/pure-ftpd.conf,在配置文件中找到下面几个参数进行修改:#…

AI视频生成技术爆发 引领虚拟数字人产业新潮流

2024年刚开局&#xff0c;先有OpenAI的AI视频生成模型Sora惊艳全网&#xff0c;随后阿里巴巴发布EMO&#xff0c;一张照片音频&#xff0c;就能生成具有生动表情和各种头部姿势、口型完全匹配高保真的人声头像动态视频。 技术的革新不仅为内容创作者打开了新世界的大门&#xf…

数据结构——队列练习题

在C语言中&#xff0c;.和->运算符用于访问结构体的成员变量。它们之间的区别在于&#xff1a;.运算符用于访问结构体变量的成员。->运算符用于访问结构体指针变量的成员 1a&#xff08;rear指向队尾元素后一位&#xff0c;判空判满时牺牲一个存储单元&#xff09; 首先…

小抄 20240703

1 “这么多年&#xff0c;什么都没有变化。” 同样看到这句话&#xff0c;有人会觉得幸福&#xff0c;有人会觉得悲伤。 好的事没变&#xff0c;就觉得幸福。 坏的事没变&#xff0c;会觉得悲伤。 2 人类预测不到的大趋势&#xff0c;只有技术大爆炸&#xff0c;关于人的那…

PEFT - 安装及简单使用

LLM、AIGC、RAG 开发交流裙&#xff1a;377891973 文章目录 一、关于 PEFT二、安装1、使用 PyPI 安装2、使用源码安装 三、快速开始1、训练2、保存模型3、推理4、后续步骤 本文翻译整理自&#xff1a;https://huggingface.co/docs/peft/index 一、关于 PEFT &#x1f917;PEFT…

算力共享解决方案

目录 算力共享解决方案 一、引言 二、目标 三、技术架构 一、基础设施层 二、服务层 三、应用层 四、实施步骤 五、安全与隐私保护 六、经济模型(信用评估-博弈论) 算力共享解决方案 一、引言 背景分析&#xff1a; 随着大数据、人工智能、区块链等技术的飞速发展&…

BugKu-WEB-sodirty

目录 前言 正文 信息收集 代码审计 验证 结尾 前言 七月始,暑假副本也正式开启 正文 信息收集 看着貌似没啥意义 看样子是有备份文件 下载下来 快速审计一下 代码审计 来吧 app.js没啥东西,主要是功能是实现error 我们找一找有没有index.js 找到了 \www\routes\in…

MySQL的Docker部署方式

说明:Docker部署MySQL主要是简单快速&#xff0c;不会对电脑系统造成污染。假如你的本地没有Docker&#xff0c;或者你不会使用Docker&#xff0c;则使用PyCharm去启动MySQL&#xff0c;或者直接在本机安装MySQL都是可以的。最重要的是&#xff0c;你要有一个MySQL环境&#xf…

使用 Git Hooks 防止敏感信息泄露

欢迎关注公众号&#xff1a;冬瓜白 在日常开发中&#xff0c;我们可能会不小心将敏感信息提交到 Git。为了防止这种情况&#xff0c;可以利用 Git Hooks 编写一个简单的脚本&#xff0c;当发现提交中包含敏感词时&#xff0c;给出提示。 以下是一个基于 pre-commit 钩子的示例…

踩坑:Unity导出WebGL发布到手机上竖屏时强制显示横屏

具体的适配问题 公司的项目需要将游戏导出WebGL 发布到Web平台 本以为是个很简单的事情 谁知道却被个横竖屏适配搞的头晕 毕竟只有大学浅浅的学了下HTML这门语言 出来工作后基本上都是在跟C# Lua打交道 言归正传 看看具体问题吧 游戏如果从横屏进入 基本上不会有什么适配问题…

C++ 多进程多线程间通信

目录 一、进程间通信 1、管道&#xff08;Pipe&#xff09; 2、消息队列&#xff08;Message Queue&#xff09; 3、共享内存&#xff08;Shared Memory&#xff09; 4、信号量&#xff08;Semaphore&#xff09; 5、套接字&#xff08;Socket&#xff09; 6、信号&…

Finding Global Homophily in Graph Neural Networks When Meeting Heterophily

本文发表于:ICML22 推荐指数: #paper/⭐⭐⭐ 问题背景: 异配图的邻接矩阵难以确定,以及异配图的计算复杂度开销大 可行的解决办法:高通滤波多跳邻居,GPRGNN(pagerank一类&#xff0c;各阶邻居的权重不同,ACM-GCN&#xff08;高低通滤波,H2GCN&#xff08;应该复杂度很大&…

碳课堂|搞清楚碳足迹,只看这篇文章就够了

碳足迹管理是碳达峰碳中和的重要政策工具&#xff0c;2023年12月&#xff0c;国家发展改革委、工信部、国家市场监管总局、住房城乡建设部、交通运输部等部门联合印发《关于加快建立产品碳足迹管理体系的意见》&#xff0c;对产品碳足迹管理各项重点任务作出系统部署。 推动碳…