Mybatis中@SelectKey注解

注解简介

@SelectKey 注解主要用于在插入数据后获取数据库生成的主键。这在很多数据库中是常见的做法,比如使用自增字段或序列生成主键。

@SelectKey 注解通常与插入数据的 SQL 语句一起使用,它告诉 MyBatis 在执行插入操作后执行另一个 SQL 语句来获取主键。

@SelectKey注解用在已经被 @Insert@InsertProvider@Update@UpdateProvider注解了的方法上。若在未被上述四个注解的方法上作 @SelectKey 注解则视为无效。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SelectKey {/*** 查询主键的sql语句*/String[] statement();/*** 表示查询结果赋值给代码中的哪个对象,一般是赋值给对象的某个属性*/String keyProperty();/*** 表示将查询结果赋值给数据库表中哪一列*/String keyColumn() default "";/*** 可以设置为 true 或false。要运行的SQL语句,before=true表示插入之前进行查询,可以将查询结果赋给keyProperty和keyColumn,* 赋给keyColumn相当于更改数据库。before=false表示先插入,再查询,这时只能将结果赋给keyProperty。*/boolean before();/*** 这是预期返回的键值的 Java 类型。*/Class<?> resultType();/*** 语句类型.*/StatementType statementType() default StatementType.PREPARED;
}

注解的使用注意事项

@SelectKey注解,即听命他人,也指挥别人,主要表现在两个方面:
(1)自身无效的情况。需要前置注解才能生效:@Insert@InsertProvider @Update@UpdateProvider,否则无效。
(2)他人无效的情况。如果指定了 @SelectKey 注解,那么 MyBatis 就会忽略掉由 @Options 注解所设置的生成主键。


下面是一个简单的例子:

@Insert("INSERT INTO user (name, email) VALUES (#{name}, #{email})")  
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", resultType = Long.class, before = false)  
Long insertUser(User user);

在这个例子中,@Insert 注解用于定义插入数据的 SQL 语句。@SelectKey 注解则定义了另一个 SQL 语句 SELECT LAST_INSERT_ID(),用于在插入操作后获取生成的主键。keyProperty 指定了将获取到的主键值设置到哪个属性上(这里是 User 对象的 id 属性),resultType 指定了主键值的类型(这里是 Long),before 属性指定了 @SelectKey 注解的 SQL 语句是在插入操作之前执行还是之后执行(这里是 false,表示在之后执行)。


注解的应用场景

如果向数据库中插入一条数据,同时有希望返回该条记录的主键,该怎么处理了?有两种情况:
(1)数据库主键不是自增列,需要预先生成,然后才能向数据库中插入一条数据;
(2)数据库主键是自增列,插入数据之前,无需自己生成主键,插入成功之后才能获知主键。

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

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

相关文章

打造大型ERP系统:Spring Cloud的优雅实践

在当今的信息化时代&#xff0c;企业资源规划&#xff08;ERP&#xff09;系统已经成为企业信息化管理的核心。随着企业规模的不断扩大&#xff0c;对ERP系统的可扩展性和可维护性要求也越来越高。近年来&#xff0c;微服务架构逐渐兴起&#xff0c;它以其高内聚、低耦合的特性…

利用计算机视觉算法提取裂纹相关特征参数信息

ABCnutter/CrackFeature: &#x1f680;使用计算机视觉相关算法提取裂缝的骨架&#xff08;矢量化&#xff09;、轮廓【支持提前修复断裂裂缝】&#xff0c;以及几何特征参数&#xff08;长度、宽度、面积和主要方向&#xff09;【欢迎Star】。主要流程以及相关算法如下&#x…

zato,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - zato。 Zato是一个高性能的Python企业服务总线(ESB)和应用集成框架&#xff0c;专为简化复杂系统间的通信和数据交换而设计。它提供了一个灵活、可扩展的平台&#xff0c;以支持各种集成需求&#xff0c;从简单的数据传…

Android Studio 之 Intent及其参数传递

一、Intent 显式Intent&#xff1a;通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-…

autoware.universe perception中ground_segmetation的基础知识学习笔记

[[maybe_unused]] 是 C11 及之后版本中的一个属性&#xff0c;用于抑制编译器关于未使用实体&#xff08;变量、函数等&#xff09;的警告。它告诉编译器&#xff0c;如果实体未被使用&#xff0c;那也是可以接受的&#xff0c;因此不会为此生成警告。[[maybe_unused]] 只能用于…

代码随想录——动态规划

系列文章目录 代码随想录——回溯 代码随想录——贪心算法 代码随想录——动态规划 文章目录 系列文章目录概述简单斐波那契数***爬楼梯***使用最小花费爬楼梯不同路径不同路径 II***整数拆分***不同的二叉搜索树***普通0-1背包***分割等和子集***最后一块石头的重量 II***目标…

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…

ros-param添加参数控制rviz显示掉帧问题

在ros中有一套参数系统可以直接写到launch文件中&#xff0c;这样非常方便&#xff0c;不需要编译就能直接用&#xff0c;这对于c来说非常的有好&#xff0c;这里记录一下如何使用。 主要步骤如下&#xff1a; 首先初始化节点 使用nodehandle进行管理&#xff0c;然后通过param…

企业常用Linux文件命令相关知识+小案例

远程连接工具无法连接VMWARE&#xff1a; 如果发现连接工具有时连不上&#xff0c;ip存在&#xff0c;这时候我们查看网络编辑器&#xff0c;更多配置&#xff0c;看vnet8是不是10段&#xff0c;nat设置是否是正确的&#xff1f; 软件重启一下虚机还原一下网络编辑器 查看文件…

Windows版PHP7.4.9解压直用(免安装-绿色-项目打包直接使用)

安装版和解压版 区别 安装版: 安装方便&#xff0c;下一步------下一步就OK了&#xff0c;但重装系统更换环境又要重新来一遍&#xff0c;会特别麻烦解压版&#xff08;推荐&#xff09;&#xff1a; 这种方式&#xff08;项目打包特别方便&#xff09;能更深了解mysql的配置&…

PCA 主成分分析

PCA(Principal Component Analysis)&#xff0c;即主成分分析方法&#xff0c;是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上&#xff0c;这k维是全新的正交特征也被称为主成分&#xff0c;是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就…

LOF 简介

1. 背景 在LOF之前的异常检测算法大多是基于统计方法的&#xff0c;或是借用了一些聚类算法用于异常点的识别(如DBSCAN, OPTICS)。但这些方法都有一些不完美的地方&#xff1a; 1. 基于统计的方法&#xff1a;通常需要假设数据服从特定的概率分布&#xff0c;这个假设往往是不成…

electron项目打包慢、打包报错

项目使用了electron框架&#xff0c;在第一次打包或者网络条件不好的环境下进行打包时熟速度慢的出奇&#xff0c;甚至经常出现打包失败的情况&#xff08;如上面图片的报错&#xff09;。 这是因为&#xff0c;在electron打包的过程中&#xff0c;需要去官方源https://github.…

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了&#xff0c;分数一百分可能&#xff0c;感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204&#xff0c;纯手写 第二题是 物理题 纯蒙&#xff0c;随便猜了个轨迹&#xff0c;答案具体忘了&#xff0c;最后是 .45 第三题暴力 第四题 我是傻逼…

指针的深入理解(七)

指针的深入理解&#xff08;七&#xff09; 个人主页&#xff1a;大白的编程日记 个人专栏&#xff1a;C语言学习之路 感谢遇见&#xff0c;我们一起学习进步&#xff01; 文章目录 指针的深入理解&#xff08;七&#xff09;前言一.常量字符串指针1.1常量字符串的理解1.2常量…

DSBridge---跨端的原生与H5的通信框架

dsBridge介绍 dsBridge是一个三端易用的现代跨平台 Javascript bridge&#xff0c; 通过它&#xff0c;你可以在Javascript和原生之间同步或异步的调用彼此的函数。 最近在开发h5相关的需求&#xff0c;而且相关的h5页面会嵌入到app&#xff0c;h5页面有拍照、上传照片、上传…

OneFlow深度学习简介

介绍 OneFlow是一个基于深度学习的开源框架,主要面向机器学习工程师和研究人员。它提供了类似于其他深度学习框架(如TensorFlow和PyTorch)的API,同时具有高性能和高效的特点。OneFlow专注于在大规模数据集和分布式环境下的训练和推理,以及在生产环境中的部署和优化。其设计…

HBuilderX 中开发vue,引入百度地图获取当前ip地址定位

实现功能&#xff1a;使用百度地图获取IP地址&#xff0c;定位到当前位置 参考文档地址&#xff1a;MapVGL | 快速入门 一、在有外网的情况下&#xff0c;常规引入百度地图的方法如下&#xff1a; 1、在index.html中引入 <script src"//api.map.baidu.com/api?v1.…

Python100个库分享第14个—plyfile(将ply文件展示3d模型)

目录 专栏导读库的介绍库的安装ply文件格式介绍ply下载网址&#xff08;是斯坦福大学的3d模型下载网址&#xff09;报错解决完整代码参考&#xff1a;总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️…

理解Go语言中上下文

开发人员有时会误解context.Context类型,尽管它是Go语言的关键概念之一,也是Go中并发代码的基础之一。接下来让我们看看这个概念,并确保我们理解为什么乃如何有效地使用它。 根据官方文档: 上下文(context)携带最后期限、取消信号和其他跨API边界的值。 下面让我们来看下这…