mybatis批量新增数据;批量修改数据;存在则更新,不存在则插入

一、批量新增

dao层:

boolean insertBatchDelegation(List list);

xml层:


    insert into act_delegation
    (
        act_name
        ,act_key
        ,from_user_id
        ,from_user_name
        ,to_user_id
        ,to_user_name
        ,start_date
        ,end_date
        ,gmt_create
    )
    values
    
    (
        #{item.actName}
        ,#{item.actKey}
        ,#{item.fromUserId}
        ,#{item.fromUserName}
        ,#{item.toUserId}
        ,#{item.toUserName}
        ,#{item.startDate}
        ,#{item.endDate}
        ,now()
    )
    

另外一种写法: 特别注意separator的值,上面的方法是separator=",";下面的方法是separator=";"

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3310/erp-zyjsgx-v2?allowMultiQueries=true

    
        insert into act_delegation
        (
            act_name
            ,act_key
            ,from_user_id
            ,from_user_name
            ,to_user_id
            ,to_user_name
            ,start_date
            ,end_date
            ,gmt_create
        )
        values
        (
            #{item.actName}
            ,#{item.actKey}
            ,#{item.fromUserId}
            ,#{item.fromUserName}
            ,#{item.toUserId}
            ,#{item.toUserName}
            ,#{item.startDate}
            ,#{item.endDate}
            ,now()
        )
    

二、批量修改(也是两种写法,同上不再展示)

dao层:

int updatePdBatch(List> list);

xml层:


    
        update erp_jiagongclzkc
        
            cailiaosl = ${item.cailiaosl}
            , xiugairid = #{item.xiugairid}
            , xiugairxm = #{item.xiugairxm}
            , xiugaisj = NOW()
            , xiugairbmid = #{item.xiugairbmid}
            , xiugairbmmc = #{item.xiugairbmmc}
            , xiugairgsid = #{item.xiugairgsid}
            , xiugairgsmc = #{item.xiugairgsmc}
        
        where cailiaobm = #{item.cailiaobm}
        AND chuangjianrgsid = #{item.chuangjianrgsid}
    

三、存在则更新,不存在则插入(也是两种写法,同上不再展示)

dao层:

int inserOrUpdateBatch(List> list);

xml层:


    INSERT INTO erp_jiagongclzkc
    (
        fenleiid
        , fenleimc
        , cailiaoid
        , cailiaobm
        , cailiaomc
        , guigexh
        , jiliangdw
        , cailiaosl
        , beizhu
        , chuangjianrid
        , chuangjianrxm
        , chuangjiansj
        , chuangjianrbmid
        , chuangjianrbmmc
        , chuangjianrgsid
        , chuangjianrgsmc
        , xiugairid
        , xiugairxm
        , xiugaisj
        , xiugairbmid
        , xiugairbmmc
        , xiugairgsid
        , xiugairgsmc
        , cailiaoyl
    )
    VALUES
    
      (
        #{item.fenleiid}
        , #{item.fenleimc}
        , #{item.cailiaoid}
        , #{item.cailiaobm}
        , #{item.cailiaomc}
        , #{item.guigexh}
        , #{item.jiliangdw}
        , #{item.cailiaosl}
        , #{item.beizhu}
        , #{item.chuangjianrid}
        , #{item.chuangjianrxm}
        , NOW()
        , #{item.chuangjianrbmid}
        , #{item.chuangjianrbmmc}
        , #{item.chuangjianrgsid}
        , #{item.chuangjianrgsmc}
        , #{item.xiugairid}
        , #{item.xiugairxm}
        , NOW()
        , #{item.xiugairbmid}
        , #{item.xiugairbmmc}
        , #{item.xiugairgsid}
        , #{item.xiugairgsmc}
        , #{item.cailiaoyl}
      )
    
    ON DUPLICATE KEY UPDATE
        cailiaosl = values(cailiaosl) + values(cailiaoyl)
        , xiugairid = values(xiugairid)
        , xiugairxm = values(xiugairxm)
        , xiugaisj = values(xiugaisj)
        , xiugairbmid = values(xiugairbmid)
        , xiugairbmmc = values(xiugairbmmc)
        , xiugairgsid = values(xiugairgsid)
        , xiugairgsmc = values(xiugairgsmc)

特别说明

ON DUPLICATE KEY UPDATE
        cailiaosl = values(cailiaosl) + values(cailiaoyl)

values(***) 是指 如果数据库表中已存在新插入的这条数据 将这条旧数据的cailiaosl 更新为valuse中的数据

KEY 必须是主键或者UNIQUE 索引

转载于:https://my.oschina.net/warm6Y/blog/3101714

你可能感兴趣的:(mybatis批量新增数据;批量修改数据;存在则更新,不存在则插入)