有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java关于上传数据列表的问题解决方案

我有一个包含以下字段的客户表:ID、姓名、年龄、电话号码、内容、地址

姓名+年龄+电话号码是唯一的

我有一个带有请求主体的upsert POST API:

[
   {
      "name": "A",
      "age": 100,
      "phoneNumber": 1000,
      "content": "content",
      "address": "address"
   }, ...
]

我的要求是检查姓名+年龄+电话号码是否存在,并进行客户更新。如果没有,请进行客户插入。 我的解决方案是:循环请求列表->;根据姓名+年龄+电话号码检查数据库,将其分为两个列表:insertList和updateList。然后在每个列表上使用saveAll()

但是如果列表中有1000条记录,我需要点击DB 1000次来分离。我认为我的解决方案不好,那么您是否有其他性能更好的解决方案?我正在使用Java8和oracle数据库


共 (2) 个答案

  1. # 1 楼答案

    我不会说Java,但我有一个建议

    在数据库中创建一个新表(包含您提到的所有列——名称、年龄等)(我们称之为list_table)并将这1000条记录存储在那里。正如我所说,我不懂Java,所以我不知道它实际需要做多少工作,但我认为它不应该太复杂

    完成后,切换到SQL并使用merge语句,该语句将在无时间中对目标表执行向上插入

    merge into target_table a
      using (select name, age, phonenumber, content, address
             from list_table
            ) b
      on (a.name        = b.name and
          a.age         = b.age  and
          a.phonenumber = b.phonenumber
         )
      when matched then update set
        a.content = b.content,
        a.address = b.address
      when not matched then insert (name, age, phonenumber, content, address)
        values (b.name, b.age, b.phonenumber, b.content, b.address);
    
  2. # 2 楼答案

    据我所知,您不想点击DB1000次来检查是否需要插入或更新。一种方法是,遍历您的请求,收集列表中的所有name+age+phNumber,现在完成后,用列表点击db一次,找出要插入的数量和要更新的数量