重写mybatis-plus的saveUpdate方法

1.问题出现

同步外部数据的时候,如果需要同步逻辑删除的数据,mybatis-plus的saveOrUpdate||saveOrUpdateBath方法底层根据先查出数据数据是否存在,存在则更新不存在则新增,数据逻辑删除时,mybatis-plus查询不出来会执行插入造成主键冲突异常

2.问题解决(重写方法)

Mapper.java

public interface MdmCustomerBankInfoMapper extends BaseMapper<MdmCustomerBankInfo> {
int saveOrUpdate(MdmCustomerBankInfo list);
int saveOrUpdateBatch(List<MdmCustomerBankInfo> list);
}

Mapper.xml

saveOrUpdate

    <update id="selfSaveOrUpdateBatch">
INSERT INTO mdm_customer_bank_info (id,customer_id,account_holder_name,bank_country,bank_account_num,bank_name,
bank_branch_code,created_by,created_time,updated_by,updated_time,is_deleted) SELECT * FROM (
SELECT
#{item.id} as id,
#{item.customerId} as customer_id,
#{item.accountHolderName} as account_holder_name,
#{item.bankCountry} as bank_country,
#{item.bankAccountNum} as bank_account_num,
#{item.bankName} as bank_name,
#{item.bankBranchCode} as bank_branch_code,
#{item.createdBy} as created_by,
#{item.createdTime} as created_time,
#{item.updatedBy} as updated_by,
#{item.updatedTime} as updated_time,
#{item.isDeleted} as is_deleted
FROM DUAL
) t2
on DUPLICATE KEY UPDATE customer_id=t2.customer_id,account_holder_name=t2.account_holder_name,bank_country=t2.bank_country,bank_account_num=t2.bank_account_num,
bank_name=t2.bank_name,bank_branch_code=t2.bank_branch_code,
created_by=t2.created_by,created_time=t2.created_time,updated_by=t2.updated_by,updated_time=t2.updated_time,is_deleted = t2.is_deleted
</update>

saveOrUpdateBath

    <update id="selfSaveOrUpdateBatch">
INSERT INTO mdm_customer_bank_info (id,customer_id,account_holder_name,bank_country,bank_account_num,bank_name,
bank_branch_code,created_by,created_time,updated_by,updated_time,is_deleted) SELECT * FROM (
<foreach collection="list" item="item" index="index" separator="union">
SELECT
#{item.id} as id,
#{item.customerId} as customer_id,
#{item.accountHolderName} as account_holder_name,
#{item.bankCountry} as bank_country,
#{item.bankAccountNum} as bank_account_num,
#{item.bankName} as bank_name,
#{item.bankBranchCode} as bank_branch_code,
#{item.createdBy} as created_by,
#{item.createdTime} as created_time,
#{item.updatedBy} as updated_by,
#{item.updatedTime} as updated_time,
#{item.isDeleted} as is_deleted
FROM DUAL
</foreach>
) t2
on DUPLICATE KEY UPDATE customer_id=t2.customer_id,account_holder_name=t2.account_holder_name,bank_country=t2.bank_country,bank_account_num=t2.bank_account_num,
bank_name=t2.bank_name,bank_branch_code=t2.bank_branch_code,
created_by=t2.created_by,created_time=t2.created_time,updated_by=t2.updated_by,updated_time=t2.updated_time,is_deleted = t2.is_deleted
</update>

重写mybatis-plus的saveUpdate方法的更多相关文章

  1. 什么情况下才要重写Objective-C中的description方法

    特别注意: 千万不要在description方法中同时使用%@和self,同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用descrip ...

  2. 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。

    创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...

  3. spring与mybatis三种整合方法

    spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...

  4. 重写类的Equals以及重写Linq下的Distinct方法

    当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...

  5. MyBatis学习--mybatis开发dao的方法

    简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...

  6. 四 mybatis开发dao的方法

    mybatis开发dao的方法 1.1     SqlSession使用范围 1.1.1     SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...

  7. Mybatis的Mapper接口方法不能重载

    今天给项目的数据字典查询添加通用方法,发现里边已经有了一个查询所有数据字典的方法 List<Dict> selectDictList(); 但我想设置的方法是根据数据字典的code查询出所 ...

  8. 为什么要重写hashCode()方法和equals()方法及如何重写

    我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...

  9. mybatis中的updateByExampleSelective方法怎么使用

    mybatis中的updateByExampleSelective方法怎么使用.sendDetailMapper.updateByExampleSelective(sendDetail, m);参数m ...

  10. 为什么要重写hashcode方法和equals方法

    我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...

随机推荐

  1. Asp.Net Core上传大文件请求体限制设置

    IIS进程内部署时 1. Web.Config的<system.webServer>节点下增加 <security> <requestFiltering> < ...

  2. 在QAS里面,建立副本请求

  3. twenty two

    打包处理less文件 1,运行npm i less-loader@10.0.1 less@4.1.1 -D 2, 在webpack.config.js的module->rules数组中 rule ...

  4. spring 使用@Async注解实现异步调用

    1.先定义一个事件,该类继承 ApplicationEven的抽象类 import org.springframework.context.ApplicationEvent; public class ...

  5. lua-table类的继承

    --男人类man = {name = "man",age=123}--继承空间man.__index=man--儿童类child= {}--继承setmetatable(child ...

  6. hive安装准备 (mysql8.0安装)

    1.先准备好安装的所需材料 2.开始准备安装 先安装mysql 解压命令:tar -xvJf  (注意:这里' j '是大写) 解压后改名: mv mysql-8.0.24-linux-glibc2. ...

  7. 连接Oracle 19c出现ORA-28040:没有匹配的验证协议

    错误信息:ORA-28040:没有匹配的验证协议处理方法 出现这个原因是因为你的Oracle连接客户端与服务端Oracle的版本不匹配造成的.一般是低版本客户端连接高版本服务端出现. 高版本连接低版本 ...

  8. docker 可视化平台Portainer搭建

    1.部署步骤 docker pull portainer/portainer docker run -d -p 9001:9000 \--restart=always \-v /var/run/doc ...

  9. Activiti5.22.0扩展支持达梦数据库

    前言 目前国内部分公司做的项目要求去ioe使用国产的替代方案.数据从异构数据库中迁移到达梦,应用中使用Activiti工作流在替换了数据库驱动后启动过程报错如下: nested exception i ...

  10. pandas常用方法之read_excel详解

    前期准备 准备测试数据如下: fl_path = r"C:\Users\Desktop\test.xlsx" dic = { 'num': ['001', '002', '003' ...