【第18章】MyBatis-Plus主键生成策略

文章目录

  • 前言
  • 一、主键生成策略概述
  • 二、示例
  • 三、Spring Boot 配置
    • 1. 方式一:使用配置类
    • 2. 方式二:通过 MybatisPlusPropertiesCustomizer 自定义
  • 四、Spring 配置
    • 1. 方式一: XML 配置
    • 2. 方式二:注解配置
  • 总结


前言

在 MyBatis-Plus 中,主键生成策略是一个重要的概念,它决定了如何为数据库表中的记录生成唯一的主键值。以下是关于主键生成策略的详细说明和配置方法。


一、主键生成策略概述

主键生成策略必须使用 INPUT 类型,这意味着主键值需要由用户在插入数据时提供。MyBatis-Plus 支持在父类中定义 @KeySequence 注解,子类可以继承使用。

从版本 3.3.0 开始,MyBatis-Plus 会自动识别主键类型,因此不再需要手动指定主键类型。

MyBatis-Plus 内置支持多种数据库的主键生成策略,包括:

  • DB2KeyGenerator
  • H2KeyGenerator
  • KingbaseKeyGenerator
  • OracleKeyGenerator
  • PostgreKeyGenerator

如果内置的主键生成策略不能满足需求,可以通过实现 IKeyGenerator 接口来扩展自定义的主键生成策略。

二、示例

下面是一个使用 @KeySequence 注解的实体类示例:

@KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = String.class)
public class YourEntity {@TableId(value = "ID_STR", type = IdType.INPUT)private String idStr;// 其他字段和方法...
}

在这个示例中,YourEntity 类使用了 @KeySequence 注解来指定 Oracle 数据库中的序列 SEQ_ORACLE_STRING_KEY 来生成主键值,主键类型为 String

三、Spring Boot 配置

1. 方式一:使用配置类

在 Spring Boot 应用中,可以通过配置类来设置主键生成策略:

@Bean
public IKeyGenerator keyGenerator() {return new H2KeyGenerator();
}

2. 方式二:通过 MybatisPlusPropertiesCustomizer 自定义

也可以通过 MybatisPlusPropertiesCustomizer 来自定义主键生成策略:

@Bean
public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {return plusProperties -> plusProperties.getGlobalConfig().getDbConfig().setKeyGenerator(new H2KeyGenerator());
}

四、Spring 配置

1. 方式一: XML 配置

在传统的 Spring 应用中,可以通过 XML 配置来设置主键生成策略:

<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig"><property name="dbConfig" ref="dbConfig"/>
</bean><bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig"><property name="keyGenerator" ref="keyGenerator"/>
</bean><bean id="keyGenerator" class="com.baomidou.mybatisplus.extension.incrementer.H2KeyGenerator"/>

2. 方式二:注解配置

使用注解配置主键生成策略:

@Bean
public GlobalConfig globalConfig() {GlobalConfig conf = new GlobalConfig();conf.setDbConfig(new GlobalConfig.DbConfig().setKeyGenerator(new H2KeyGenerator()));return conf;
}

总结

回到顶部

以上配置方法可以根据实际项目需求选择合适的方式来设置主键生成策略。

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

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

相关文章

STM32智能家居安防系统教程

目录 引言环境准备智能家居安防系统基础代码实现&#xff1a;实现智能家居安防系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 控制系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统利用STM32嵌…

MFC+MySQL应用操作(MySQL C API )

MFCMySQL应用操作 1. MySQL C API 相关接口1.1 基本数据结构MYSQL结构体的应用 1.2 常用函数 2. 连接数据库3. 读取数据库行数据 1. MySQL C API 相关接口 1.1 基本数据结构 MYSQL是一个重要的数据结构&#xff0c;它代表了与MySQL服务器的连接。当你使用MySQL的C API来与MyS…

java.lang.LinkageError: 链接错误的正确解决方法,亲测有效,嘿嘿,有效

文章目录 问题分析报错原因解决思路解决方法&#xff08;含代码示例&#xff09;1. 检查类加载器2. 避免在运行时修改类定义3. 更新或修复 JVM4. 检查应用程序的依赖使用 Maven 检查依赖项使用 Gradle 检查依赖项 java.lang.LinkageError 是 Java 虚拟机在尝试链接类定义时发生…

使用echarts绘制中国地图根据不同的省份划分到指定区域里面中

需求:我们在开发过程中会遇到使用中国地图来划分不同区域省份下面的数量统计情况,但是有时候使用Echarts里面地图功能和我们实际业务需求不匹配的,这个时候就需要我们手动自定义进行划分不同区域下面的省份数据。例如大区1下面有哪些省份,大区2对应哪些的省份进行划分显示的…

C++ UTF-8编解码

icu 编解码数据&#xff1a; extern const UConverterSharedData _MBCSData, _Latin1Data, _UTF8Data, _UTF16BEData, _UTF16LEData, _UTF32BEData, _UTF32LEData, _ISO2022Data, _LMBCSData1,_LMBCSData2, _LMBCSData3, _LMBCSData4, _LMBCSData5, _LMBCSDat…

Windows 10新版Outlook使用不便?教你轻松退回旧版windows mail

引言 自从Windows 10推出新版Outlook以来&#xff0c;很多用户反映新版的邮件应用存在诸多不便&#xff0c;尤其是在广告邮件和正常邮件的分类上做得不够理想。面对这一问题&#xff0c;许多用户希望能够退回到Windows自带的旧版Outlook。在本文中&#xff0c;我们将详细介绍一…

数千万“四高”中老年患者,如何推动国产营养保健品创新

“三高”指高血压、高血糖&#xff08;糖尿病&#xff09;、高血脂&#xff0c;是中老年群体的常见病。 然而&#xff0c;除了前述三者&#xff0c;高尿酸血症在我国的患病率正逐年提高&#xff0c;已成为仅次于糖尿病的第二大代谢性疾病。痛风是高尿酸血症典型症状之一。 加上…

用sed去除配置文件空行和注释 去掉注释 #

sed去除注释行&#xff1a;sed -i -c -e /^#/d config_file sed去除空行&#xff1a; sed -i -c -e /^$/d config_file sed去空行和注释行&#xff1a;sed -i -c -e /^$/d;/^#/d config_file [rootrac1 ~]# cat a a b adss afdsf af # o #asd ## asdf # adfas fad af # a …

【数据结构】07.循环队列

一、循环队列的定义 定义&#xff1a;队列主要有顺序队列&#xff0c;循环队列&#xff0c;双端队列&#xff0c;优先队列。而当中循环队列是一种线性数据结构。它也被称为“环形缓冲器”。它只允许在一端进行插入操作&#xff0c;即队尾&#xff08;rear&#xff09;&#xf…

【对顶堆 优先队列】295. 数据流的中位数

本文涉及知识点 对顶堆 优先队列 LeetCode295. 数据流的中位数 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 …

CVE-2019-12272 Openwrt可视页面LuCi命令注入漏洞复现(完结)

声明 本文所使用的一些源代码等内容已经上传至github&#xff0c;具体地址如下 Vulnerability_POC-EXP/OpenWrt/CVE-2019-12272 at main a2148001284/Vulnerability_POC-EXP GitHub 漏洞简介 参考内容&#xff1a; CVE-2019-12272 OpenWrt图形化管理界面LuCI命令注入分析 |…

有哪些有效的策略可以提升独立站的外链数量?

有哪些有效的策略可以提升独立站的外链数量&#xff1f;提升独立站的外链数量并不难&#xff0c;难得是不被谷歌惩罚把你的网站判定为作弊&#xff0c;正因如此&#xff0c;了解并应用GNB自然外链策略是个不错的开始&#xff0c;GNB外链的核心价值在于它提高了网站外链资源的自…

Hazelcast同一个集群发布注意数据一致性与版本兼容性检查示例

Hazelcast Hazelcast是一个开源的、分布式内存数据网格&#xff08;IMDG&#xff0c;In-Memory Data Grid&#xff09;平台&#xff0c;它提供了一系列的分布式数据管理和计算服务。Hazelcast旨在解决大数据和高性能计算场景下的挑战&#xff0c;特别是在分布式系统中提供低延…

【LinuxC语言】线程池之添加工作任务线程

文章目录 前言工作线程工作流程代码介绍函数内容如何去编写代码概况总结前言 在并发编程中,线程池是一种常见的设计模式,它可以有效地管理和控制线程的执行。线程池中的线程可以执行一系列的任务,这些任务通常是独立且相互没有依赖关系的。在Linux C语言环境下,我们可以使…

如何学习和提升SQL

资料来源于腾讯技术直播&#xff0c;只作为学习记录&#xff0c;如有侵权&#xff0c;请联系作者进行删除

Python正则表达式入门用法(下)

Python的正则表达式模块是re。要使用它&#xff0c;需要先导入re模块。下面是一些常用的正则表达式操作&#xff1a; re.match(pattern, string): 从字符串的开始位置匹配一个模式&#xff0c;并返回匹配对象。如果匹配成功&#xff0c;则返回匹配对象&#xff1b;如果匹配失败…

关于单点登录(Single Sign-On,SSO)

业务背景 在企业发展初期&#xff0c;企业使用的系统很少&#xff0c;通常一个或者两个&#xff0c;每个系统都有自己的登录模块&#xff0c;用户用不同的账号即可登录&#xff0c;很方便。 但随着企业的发展&#xff0c;用到的系统随之增多&#xff0c;用户在操作不同的系统时…

分享6个自己每天都会打开的网站

分享6个自己每天都会打开的网站&#xff0c;有实用办公网站&#xff0c;也有休闲摸鱼网站&#xff0c;链接直达&#xff0c;速看~ 1、鸠摩搜索 https://www2.jiumodiary.com/ 一个免费的电子书下载网站&#xff0c;页面干净无广告&#xff0c;只有一个搜索框&#xff0c;输入…

应用了网络变压器的PC网卡连接转换器后不好连网,有掉线现象,但外接路由器无问题,可能是什么原因?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是应用了网络变压器的PC网卡连接转换器后不好连网&#xff0c;有掉线现象&#xff0c;但外接路由器无问题&#xff0c;可能是什么原因呢&#xff1f;如何解决呢&#xff1f; 首先&#xff0c;我们要了解传…

web前端之浏览器从输入URL到页面展示的过程、建立TCP连接与三次握手、发送HTTP请求、DNS解析、地址、渲染

MENU 前言DNS解析建立TCP连接发送HTTP请求服务器处理请求接收HTTP响应解析HTML解析CSS渲染页面结束 前言 浏览器从输入URL到页面展示的过程&#xff0c;这是一件看似简单却又十分复杂的事情。我们每天都在使用浏览器&#xff0c;却很少关注它们背后的工作原理。本文将从多个方面…