当前位置: 首页 > article >正文

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

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 version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//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中的id
    void 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.kler.cn/a/400434.html

相关文章:

  • 每日一练 | 包过滤防火墙的工作原理
  • 搭建MC服务器
  • C指针之舞——指针探秘之旅
  • 【unity小技巧】一些unity3D灯光的使用与渲染及性能优化方案
  • Vulnhub靶场案例渗透[9]- HackableIII
  • RabbitMQ-死信队列(golang)
  • Java Collection的使用
  • Jaskson处理复杂的泛型对象
  • (Linux 入门) 基本指令、基本权限
  • 动态规划 之 子序列系列 算法专题
  • 脚手架vue-cli,webpack模板
  • 资源管理功能拆解——如何高效配置和管理项目资源?
  • 高斯数据库Postgresql死锁和锁表解决方法
  • MATLAB深度学习(三)——LeNet卷积神经网络
  • 独立站干货:WordPress主机推荐
  • Python高级编程模式和设计模式
  • CTF攻防世界小白刷题自学笔记14
  • Flink算子
  • Vue 3 中 ref 属性详解:操作 DOM 元素的利器
  • Python的3D可视化库 - vedo (1)简介和模块功能概览
  • ThinkPHP6的ORM模型
  • hive-内部表外部表-详细介绍
  • Java 网络编程:Socket 与网络通信
  • Jtti:服务器总是自动重启怎么办?
  • 如何保存python文件
  • 最新6.7分非肿瘤纯生信,使用机器学习筛选慢阻肺中的关键基因。机器学习在非肿瘤生信文章中正火,可重复!