MyBatis XML一个方法执行插入或更新操做(PostgreSQL)

news/2024/11/16 13:55:54/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

MyBatis XML一个方法执行插入或更新操做(PostgreSQL)

在MyBatis中,你可以使用PostgreSQL的INSERT … ON CONFLICT子句来实现插入或更新(即"upsert")操作。以下是一个示例,展示如何在MyBatis中配置和执行这样的操作。

PostgreSQL SQL 示例

假设你有一个表users,包含以下字段:

id (主键)
name
email
你希望在插入数据时,如果id已经存在,则更新相应的name和email字段。

SQL语句可能如下:

INSERT INTO users (id, name, email)
VALUES (1, '黎明', '123@163.com')
ON CONFLICT (id) DO UPDATE
SET name = '黎明',email = '123@163.com';

MyBatis Mapper XML 配置

首先,定义你的MyBatis Mapper XML文件,比如UserMapper.xml

xml"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.UserMapper"><insert id="insertAndUpdate" parameterType="com.example.model.User">INSERT INTO users<trim prefix="(" suffix=")" suffixOverrides=","><if test="id!=null">id,</if><if test="name!=null and name!=''">name,</if><if test="email!=null and email!=''">email,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id!= null">#{id},</if><if test="name!=null and name!=''">#{name},</if><if test="email!=null and email!=''">#{email},</if></trim>ON conflict(id)DO UPDATE SET<trim prefix="" suffix="" suffixOverrides=","><if test="id!=null">id=#{id},</if><if test="name!=null and name!=''">name=#{name},</if><if test="email!=null and email!=''">email=#{email},</if></trim></insert></mapper>

MyBatis Mapper 接口

接下来,定义对应的Mapper接口,比如UserMapper.java:

package com.example.mapper;import com.example.model.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;@Mapper
public interface UserMapper {// 或者,如果你使用XML配置,可以省略注解,方法签名要匹配XML中的idvoid insertAndUpdate(User user);// 或者,你可以直接在接口上写sql@Insert("INSERT INTO users (id, name, email) VALUES (#{id}, #{name}, #{email}) ON CONFLICT (id) DO UPDATE SET name = #{name}, email = #{email}")void upsertUser(User user);
}

注意:ON CONFLICT子句中的冲突字段(id)必须是表的主键或有唯一约束的字段


http://www.ppmy.cn/news/1547464.html

相关文章

SOLIDWORKS Toolbox:一键自动化,让紧固件与零部件管理更高效

紧固件广泛应用于从手机到火箭的各种产品中。在SOLIDWORKS设计时&#xff0c;通过使用实际的CAD模型来包含和跟踪紧固件是最简便和全面的方法&#xff0c;这有助于理解设计的整体&#xff0c;并自动管理零件数据和设计文档&#xff0c;如工程图和物料清单(BOM)。 在SOLIDWORKS…

Ubuntu24.04上安装和配置MariaDB

Ubuntu24.04上安装和配置MariaDB #切换到root用户 sudo su -#更新系统&#xff0c;确保所有的软件都是最新的 apt update && sudo apt upgrade -y#要添加 MariaDB 存储库&#xff0c;我们需要安装一个名为 software-properties-common 的包 apt install software-prop…

28-一些常见的内存问题

诊断内存状况 ● 查看各个节点的内存状况 GET _cat/nodes?vGET _nodes/stats/indices?prettyGET _cat/nodesv&hname,queryCacheMemory,queryCacheEvictions,requestCacheMemory,requestCacheHitCount,request_cache.miss_countGET _cat/nodeshname,port,segments.memor…

AIGC行业现在适合进入吗?

AIGC行业现在适合进入吗&#xff1f; 引言 在信息时代的浪潮中&#xff0c;人工智能的崛起让我们看到了全新的机会&#xff0c;特别是在内容创作领域。AIGC&#xff08;人工智能生成内容&#xff09;技术正如一位全能的助手&#xff0c;悄然进入了我们的生活和工作。你是否曾…

【笔记】关于git和GitHub和git bash

如何推送更新的代码到github仓库 如何在此项目已经提交在别的远程仓库的基础上更改远程仓库地址&#xff08;也就是换一个远程仓库提交&#xff09; 如何删除github中的一个文件 第二版 删除github上的一个仓库或者仓库里面的某个文件_github仓库删除一个文件好麻烦-CSDN博客 …

读书笔记:《Redis设计与实现》之发布订阅

发布与订阅简介 命令 SUBSCRIBE: 订阅一个频道 SUBSCRIBE channel [channel ...]SUBSCRIBE: 向一个频道发送信息 PUBLISH channel messageUNSUBSCRIBE: 取消订阅一个频道 UNSUBSCRIBE [channel [channel ...]]PSUBSCRIBE:订阅一个或多给定模式的频道 PSUBSCRIBE pattern …

Linux 进程信号初识

目录 0.前言 1.什么是信号 1.1生活中的信号 1.2 OS中的信号 2.认识信号 2.1信号概念 2.2查看信号 2.3 signal函数 2.4代码示例 3. 信号处理方式 3.1 忽略信号 3.2 默认处理 3.3 自定义处理 4.小结 &#xff08;图像由AI生成&#xff09; 0.前言 在之前的学习中&#xff0c;我…

SHELL脚本编写基础(2)永久环境变量和字符串显位

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…