• mybatis+oracle添加数据时如果数据存在就更新,如果不存在就插入



    <insert id="insertBill" parameterType="java.util.List">

    <!-- 普通的批量插入数据
    注意:

      mybatis的jdbcType的值必须是全部大写,#{item.billCode,jdbcType=VARCHAR}

      Mybatis中jdbcType的整数类型应该为NUMERIC,而不是oracle中的整形NUMBER

    -->
    insert all
    <foreach collection="list" item="item" index="index" >
    into T_INTERF_XUE_BILL_TLJ
    ( bill_code, SEND_DATE, PIECE_NUMBER, BILL_WEIGHT,
    REGISTER_DATE, REGISTER_MAN, REGISTER_MAN_CODE, REGISTER_SITE, REGISTER_SITE_CODE
    )
    values
    (
    #{item.billCode,jdbcType=VARCHAR} ,
    #{item.sendDate,jdbcType=DATE} ,
    #{item.pieceNumber,jdbcType=NUMERIC} ,
    #{item.billWeight,jdbcType=NUMERIC} ,
    #{item.registerDate,jdbcType=DATE} ,
    #{item.registerMan,jdbcType=VARCHAR} ,
    #{item.registerManCode,jdbcType=VARCHAR} ,
    #{item.registerSite,jdbcType=VARCHAR},
    #{item.registerSiteCode,jdbcType=VARCHAR}
    )
    </foreach>
    select 1 from dual
    </insert>

    但是大部分业务是这样的,添加数据时如果数据存在就更新,如果不存在就插入,


    <insert id="insertBill" parameterType="java.util.List">
    
            merge into T_INTERF_XUE_BILL_TLJ t
            using(
            <foreach collection="list" item="item" index="index" separator="union">
                select
                #{item.billCode,jdbcType=VARCHAR} bill_code ,
                #{item.sendDate,jdbcType=DATE} send_date,
                #{item.pieceNumber,jdbcType=NUMERIC} piece_number ,
                #{item.billWeight,jdbcType=NUMERIC} bill_weight,
                #{item.registerDate,jdbcType=DATE} register_date,
                #{item.registerMan,jdbcType=VARCHAR} register_man,
                #{item.registerManCode,jdbcType=VARCHAR} register_man_code,
                #{item.registerSite,jdbcType=VARCHAR} register_site,
                #{item.registerSiteCode,jdbcType=VARCHAR} register_site_code
                from dual
            </foreach>) t1
            on (t.bill_code = t1.bill_code)
            when matched then
            update set
            t.send_date = t1.send_date,
            t.piece_number = t1.piece_number,
            t.bill_weight = t1.bill_weight,
            t.register_date = t1.register_date,
            t.register_man = t1.register_man,
            t.register_man_code = t1.register_man_code,
            t.register_site = t1.register_site,
            t.register_site_code = t1.register_site_code
            when not matched then
            insert
            (bill_code,send_date,piece_number,bill_weight,register_date,register_man,
             register_man_code,register_site,register_site_code)
            values
            (t1.bill_code,t1.send_date,t1.piece_number,t1.bill_weight,t1.register_date,
             t1.register_man,t1.register_man_code,t1.register_site,t1.register_site_code)
        </insert>

     上述sql格式如下:

    merge into 要修改的表名  别名1
    
    using (select  要修改的字段1,要修改的字段2,  关联的字段 from 表名) 别名2
    
    on (别名1.关联字段 = 别名2. 关联字段)
    
    when matched  then update  set
    
     别名1.字段 = 别名2.字段
    
     别名1.字段 = 别名2.字段
  • 相关阅读:
    linux——03-DevOps实战(详版)
    总结跟语言无关的东西
    drf—— RBAC-基于角色的访问控制
    drf—— 全局异常
    122买卖股票的最佳时机
    还记得这门古老的编程语言么,送你一份perl书单!
    程序员学习必备书单汇总,超全!
    书单来了!大厂的技术牛人在读什么:阿里篇
    书单来了!大厂的技术牛人在读什么:华为篇
    书单来了!大厂的技术牛人在读什么:腾讯篇
  • 原文地址:https://www.cnblogs.com/dragon-lan/p/15177098.html
Copyright © 2020-2023  润新知