mybaits在Oracle中使用merge into

逻辑:如果数据库里有,则进行更新操作,如果没有则插入数据。

这里的insert可以不用写字段

sql 复制代码
merge INTO table_name a using ( SELECT count( field01) co FROM table_name WHERE field01 = '123456' ) b ON ( b.co <> 0 ) 
WHEN MATCHED THEN
UPDATE 
	SET field02 = 'update' 
WHERE
	field01 = '123456' 
	WHEN NOT matched THEN
INSERT
VALUES
	( '123456', 'insert' )

这里事务要自己提交一下,不然就会卡死

java 复制代码
    //事务的一些基础信息,如超时时间、隔离级别、传播属性等
    @Resource
    private TransactionDefinition transactionDefinition;

    //事务管理器
    @Resource
    private PlatformTransactionManager platformTransactionManager;
    
    @Override
    public Json saveServiceImpl(Entity entity) {
        //TransactionStatus:事务的一些状态信息,如是否是一个新的事务、是否已被标记为回滚
        TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);
        try {
            int count = this.baseMapper.saveMapper(entity);
            System.out.println("事务提交前:" + count);
            platformTransactionManager.commit(transaction);
            System.out.println("事务已提交:" + count);
        } catch (Exception e) {
            e.printStackTrace();
            platformTransactionManager.rollback(transaction);
            return Json.error("保存失败" + e.getMessage(), null, 500);
        }
        return Json.success(1);
    }

xml写法(注意:条件字段{field01}不能被更新)

xml 复制代码
<insert id="saveMapper" parameterType="com.azure.entity.Entity ">
        merge INTO table_name using (SELECT count(1) coun
        FROM table_name
        WHERE field01 = #{field01,jdbcType=VARCHAR}) b ON (b.coun > 0)
        WHEN NOT matched THEN
        INSERT (field01, field02)
        VALUES (#{field02,jdbcType=VARCHAR},
        #{field03,jdbcType=VARCHAR})
        WHEN matched THEN
        UPDATE
        <trim prefix="set" suffixOverrides=",">
            <if test="field02 != null and field02 != ''">
                a.field02 = #{field02,jdbcType=VARCHAR},
            </if>
            <if test="field03 != null and field03 != ''">
                a.field03 = #{field03,jdbcType=VARCHAR},
            </if>
        </trim>
    </insert>
相关推荐
麦兜*7 分钟前
【Mysql及各种关系型数据库全面对比与深度解析(2025版)】
数据库·sql·mysql·postgresql·oracle·sqlserver·mariadb
扶光与望舒呀12 分钟前
mysql 的卸载- Windows 版
数据库·mysql
星垣矩阵架构师39 分钟前
架构设计之存储高性能——非关系型数据库(NoSQL)
数据库·架构·nosql
明月看潮生1 小时前
青少年编程与数学 01-011 系统软件简介 16 Redis数据库
数据库·redis·青少年编程·编程与数学
明月看潮生1 小时前
青少年编程与数学 01-011 系统软件简介 15 MongoDB数据库
数据库·mongodb·青少年编程·编程与数学
喵叔哟1 小时前
第7章:Neo4j索引与约束
数据库·oracle·neo4j
Winn~2 小时前
MySQL行锁、记录锁、间隙锁、临建锁、意向锁、表锁
数据库·mysql
snowful world2 小时前
PolyU Palmprint Database掌纹识别数据集预处理(踩坑版)
数据库·人工智能·opencv
Mylvzi2 小时前
【MySQL 从 0 讲解系列】深入理解 GROUP BY 的本质与应用(含SQL示例+面试题)
数据库·sql·mysql
Forest_HAHA3 小时前
<6>-MySQL表的增删查改
数据库·mysql