Mybatis Mapper XML文件-插入,更新,删除(insert, update and delete)

数据修改语句(插入、更新和删除)在实现上非常相似:

<insertid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"keyProperty=""keyColumn=""useGeneratedKeys=""timeout="20"><updateid="updateAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20"><deleteid="deleteAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20">

Insert, Update and Delete 属性

Attribute(属性)Description(描述)
id在该命名空间中的唯一标识符,可用于引用该语句。
parameterType将传递到该语句的参数的完全限定类名或别名。此属性是可选的,因为MyBatis可以根据传递给该语句的实际参数计算要使用的TypeHandler。默认值是未设置的。
parameterMap这是一种弃用的引用外部parameterMap的方法。请使用内联参数映射和parameterType属性。
flushCache将此设置为true将在调用此语句时刷新第二级缓存和本地缓存。对于插入、更新和删除语句,默认值为true。
timeout这设置了驱动程序在发出请求后等待数据库返回的最长时间(以秒为单位),超过该时间将抛出异常。默认值是unset(依赖于驱动程序)。
statementType可以选择其中的一个:STATEMENT、PREPARED或CALLABLE。这会让MyBatis分别使用Statement、PreparedStatement或CallableStatement。默认值为PREPARED。
useGeneratedKeys(仅适用于插入和更新)这告诉MyBatis使用JDBC的getGeneratedKeys方法来检索数据库内部生成的键(例如,在MySQL或SQL Server等关系数据库管理系统中的自增字段)。默认值为false。
keyProperty(仅适用于插入和更新)标识一个属性,MyBatis将设置由getGeneratedKeys方法返回的键值,或者由insert语句的selectKey子元素返回的键值。默认值为unset。如果预期有多个生成的列,则可以使用逗号分隔的属性名称列表。
keyColumn(仅适用于插入和更新)设置表中具有生成键的列的名称。这只在某些数据库(如PostgreSQL)中需要,当键列不是表中的第一列时。如果预期有多个生成的列,则可以使用逗号分隔的列名称列表。
databaseId如果配置了databaseIdProvider,则MyBatis将加载所有没有databaseId属性或databaseId与当前数据库标识匹配的语句。如果在具有和不具有databaseId的情况下找到了相同的语句,则后者将被丢弃。

以下是一些插入、更新和删除语句的示例:

<insert id="insertAuthor">insert into Author (id,username,password,email,bio)values (#{id},#{username},#{password},#{email},#{bio})
</insert><update id="updateAuthor">update Author setusername = #{username},password = #{password},email = #{email},bio = #{bio}where id = #{id}
</update><delete id="deleteAuthor">delete from Author where id = #{id}
</delete>

如前所述,插入语句相对更丰富一些,它具有一些额外的属性和子元素,可以以多种方式处理键的生成。

如果你的数据库支持自动生成键字段(例如MySQL和SQL Server),那么你可以简单地设置useGeneratedKeys="true"并将keyProperty设置为目标属性,就完成了键的自动生成。例如,如果上面的Author表使用了自动生成列类型作为id,则语句将修改如下:

<insert id="insertAuthor" useGeneratedKeys="true"keyProperty="id">insert into Author (username,password,email,bio)values (#{username},#{password},#{email},#{bio})
</insert>

如果你的数据库也支持多行插入操作,你可以传递一个作者列表或作者数组,并获取自动生成的键值。

<insert id="insertAuthor" useGeneratedKeys="true"keyProperty="id">insert into Author (username, password, email, bio) values<foreach item="item" collection="list" separator=",">(#{item.username}, #{item.password}, #{item.email}, #{item.bio})</foreach>
</insert>

对于那些不支持自动生成列类型或可能还不支持JDBC驱动程序中自动生成键的数据库,MyBatis提供了另一种处理键生成的方式。

下面是一个简单(有点傻)的示例,它将生成一个随机的ID(实际中可能不太会这样做,但这展示了MyBatis的灵活性和它对此并不介意):

<insert id="insertAuthor"><selectKey keyProperty="id" resultType="int" order="BEFORE">select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1</selectKey>insert into Author(id, username, password, email,bio, favourite_section)values(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>

在上面的示例中,​selectKey​语句将首先执行,Author对象的id属性将被设置,然后再调用 ​insert​语句。这样可以实现与数据库自动生成键类似的行为,而不会增加Java代码的复杂性。

`selectKey`元素的描述如下:

<selectKeykeyProperty="id"resultType="int"order="BEFORE"statementType="PREPARED">

selectKey 属性

Attribute(属性)Description(描述)
keyProperty生成的键应该设置在哪个目标属性上。如果期望有多个生成的列,则可以使用逗号分隔的属性名称列表。
keyColumn返回结果集中与属性匹配的列名。如果期望有多个生成的列,则可以使用逗号分隔的列名列表。
resultType结果的类型。MyBatis通常可以自动识别,但为了确保准确性,也可以显式指定类型。MyBatis允许使用任何简单类型作为键,包括字符串。如果预期生成多个列,则可以使用包含预期属性的对象或映射。
order此属性可以设置为 BEFORE 或 AFTER。如果设置为 BEFORE,则先执行 selectKey 语句,将生成的键设置到 keyProperty 上,然后再执行插入语句。如果设置为 AFTER,则先执行插入语句,再执行 selectKey 语句。这在某些数据库(如 Oracle)中常见,因为它们可能在插入语句中嵌入了序列调用。
statementType同上,MyBatis支持STATEMENT、PREPARED和CALLABLE语句类型,它们分别对应于Statement、PreparedStatement和CallableStatement。

作为一种特殊情况,一些数据库允许INSERT、UPDATE或DELETE语句返回结果集(例如PostgreSQL和MariaDB的RETURNING子句,或MS SQL Server的OUTPUT子句)。这种类型的语句必须被写成<select>来映射返回的数据。

<select id="insertAndGetAuthor" resultType="domain.blog.Author"affectData="true" flushCache="true">insert into Author (username, password, email, bio)values (#{username}, #{password}, #{email}, #{bio})returning id, username, password, email, bio
</select>

sql

该元素可用于定义可重复使用的 SQL 代码片段,可以包含在其他语句中。它可以在静态时(在加载阶段)进行参数化。不同属性值可以在包含实例中变化。例如:

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

然后,这个 SQL 片段可以被包含在另一个语句中,例如:

<select id="selectUsers" resultType="map">select<include refid="userColumns"><property name="alias" value="t1"/></include>,<include refid="userColumns"><property name="alias" value="t2"/></include>from some_table t1cross join some_table t2
</select>

属性值也可以在包含的`refid`属性或包含子句内的属性值中使用,例如:

<sql id="sometable">${prefix}Table
</sql><sql id="someinclude">from<include refid="${include_target}"/>
</sql><select id="select" resultType="map">selectfield1, field2, field3<include refid="someinclude"><property name="prefix" value="Some"/><property name="include_target" value="sometable"/></include>
</select>

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

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

相关文章

强烈推荐的前端学习资源,先收藏!

今天分享一些个人收藏的前端学习资源&#xff0c;按一下几个维度简单划分了下&#xff0c;有 3D、框架、构建工具等等。由于这些地址都是我个人收藏的&#xff0c;所以带有一些强烈的主观意识&#xff0c;还有很多优秀的网址没有收录进来&#xff0c;会不断更新的&#xff0c;欢…

系统分析师(软考)知识点整理(二)

会计相关 会计是指记录、分类、汇总、计量和报告发送在企业经济活动中的财务数据的行为 #mermaid-svg-YBI5YPWzqWhRB4kI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YBI5YPWzqWhRB4kI .error-icon{fill:#552222…

亚马逊鲲鹏系统引爆广告点击率提升秘籍

在竞争激烈的电商市场&#xff0c;提高广告点击率成为各大卖家争相追求的目标。而如今&#xff0c;亚马逊鲲鹏系统的强大功能再次为卖家们打开了广告优化的新大门。其中&#xff0c;搜索广告功能更是成为提高关键词排名的利器。本文将详细介绍如何通过亚马逊鲲鹏系统实现点击广…

Scrum项目管理流程及免费敏捷工具

​ 项目启动&#xff1a; 团队明确项目愿景、目标和范围&#xff0c;确定项目范围和优先级&#xff0c;并建立团队以及开展初步计划。 制定产品待办事项清单&#xff08;Product Backlog&#xff09;&#xff1a; 定义项目所需功能、任务和需求列表&#xff0c;并按优先级排序…

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现KOA-CNN-B…

定制@ResponseBody

自定义注解类&#xff08;annotation&#xff09;&#xff1a; IgnoreResult该类用于忽略不使用ResponseBody package com.baizhi.mall.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retention…

2312d,D语言单元测试等

原文 我最近决定在"系统编程"领域试些小众语言.我已用了Java,Dart和Kotlin等高级语言编程多年了(并试了许多其他相同级别或更高级的语言),需要扩大视野,因为对某些类型应用,这些语言并不是最好的工具. 这篇博文中,我想重点介绍D语言这里,经过一些初步实验,它比其他语…

Vue3 的效率提升主要表现在哪些方面?

Vue3带来了许多性能优化和效率提升的特性。本文将重点讨论Vue3在静态提升、预字符串化、缓存事件处理函数、Block Tree和PatchFlag方面的改进。我们将通过对比Vue2和Vue3的编译结果来说明这些方面的效率提升。 静态提升 在Vue2中&#xff0c;每次渲染时都会重新创建VNode节点…

linux | 软连接与硬链接 | 实测

很多知识&#xff0c;我们都是通过学习其他博主的博客&#xff0c;可是学习的过程 常常需要辩证的去辨别真伪。这很耗精力&#xff0c;最好的方法就是实践去检测。 软链接 和 应链接 在 linux 上操作非常重要 常见场景&#xff1a;最重要的就是&#xff0c;做备份&#xff0c;尤…

Talk | 约翰霍普金斯大学博士生魏晨: De-Diffusion-文本是不同模态的沟通桥梁

本期为TechBeat人工智能社区第557期线上Talk。 北京时间12月20日(周三)20:00&#xff0c;约翰霍普金斯大学博士生—魏晨的Talk已准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “De-Diffusion-文本是不同模态的沟通桥梁题”&#xff0c;介绍了她的团队在如…

面向对象程序设计(异常,RTTI,泛型,动态加载)

异常 首先&#xff0c;我们知道Java中的异常分为两大类&#xff1a;编译时异常和运行时异常。编译时异常通常是一些在编写代码时就能发现的错误&#xff0c;比如文件找不到之类的&#xff1b;而运行时异常则是在程序运行过程中出现的&#xff0c;比如除零错误。 我们可以使用…

Linux---进程状态

目录 一、系统进程状态介绍 1.运行状态 2.阻塞状态 3.挂起状态 二、Linux中的进程状态 1.R (running) 2.S (sleeping) 3.D&#xff08;disk sleep&#xff09; 4.T&#xff08;stopped&#xff09; 5.t&#xff08;tracing stop&#xff09; 6.X&#xff08;dead&am…

liunx安装git

安装 Git 更新包列表: 首先&#xff0c;更新您的包管理器的包列表。这确保您可以安装最新版本的 Git。在基于 Debian 的系统&#xff08;如 Ubuntu&#xff09;上&#xff0c;使用以下命令&#xff1a;sudo apt-get update如果您使用的是基于 RPM 的系统&#xff08;如 CentOS&…

OpenHarmony应用开发环境搭建指南

OpenHarmony的应用开发主要是基于Deveco Studio&#xff08;目前只支持Windows及Mac平台&#xff09;搭配相应的SDK进行&#xff0c;现对开发环境的搭建进行说明。 1:Deveco下载安装 下载对应平台的安装包即可。接下来以Windows平台为例&#xff0c;进行开发环境的搭建。 下载…

楼宇对讲、可视门铃案例分析

语音通话芯片&#xff1a;D34018,D34118,D5020,D31101; D34018 单片电话机通话电路&#xff0c;合并了必 需的放大器、衰减器和几种控制 功能&#xff0c;包括发送和接收衰减器、 背景噪声电平检测系统和一个衰 减器控制系统&#xff0c;对发送和接收电 平好于背景噪声做出反…

PyCharm添加自动函数文档注释

目录 1、背景2、开启PyCharm自动函数文档注释 1、背景 规范的函数文档注释有助于他人理解代码&#xff0c;便于团队协作、提高效率。但如果我们自己手写函数文档注释将非常耗时耗力。PyCharm安装后默认没有开启自动化函数文档注释&#xff0c;需要我们开启 2、开启PyCharm自动…

反序列化 [SWPUCTF 2021 新生赛]ez_unserialize

打开题目 查看源代码 得到提示&#xff0c;那我们用御剑扫描一下看看 我们知道有个robots.txt&#xff0c;访问一下得到 那我们便访问一下 cl45s.php看看 得到网站源代码 <?phperror_reporting(0); show_source("cl45s.php");class wllm{public $admin;public …

55.0/CSS 的应用(详细版)

目录 55.1.1 设计边框样式 55.1.2 调整边框的粗细 55.1.3 边框颜色 55.1.4 复合设置边框 55.2 模块的边距 55.3 模块的内边距 55.4 层的应用 55.4.1 层的建立 55.4.2 浮动——float 55.4.3 清除浮动 55.4.4 层的定位 55.4.5 设置层的溢出——overflow 55.4.6 设置鼠…

Linux开发工具——vim篇

vim开发工具的使用 文章目录 vim开发工具的使用认识vimvim常用三种模式vim正常模式命令集模式切换移动光标删除文字赋值替换撤销上一次操作更改跳到指定的行 vim末行模式命令集列出行号跳到文件中的某一行&#xff1a;保存文件离开vim查找字符&#xff1a; 总结题外话&#xff…

spring使用@Autowired @Lazy 注解 解决循环依赖

今天在启动项目时报错&#xff1a;org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘colorController’: Unsatisfied dependency expressed through field ‘projectService’; nested exception is org.springframework.…