From 7da3e3c6331a39516392aa88c14cc1da1bfcecee Mon Sep 17 00:00:00 2001 From: Bangjing Yi Date: Sun, 25 Jan 2026 12:09:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E8=83=BD=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/GeneratedKeyInterceptor.java | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/mall4cloud-common/mall4cloud-common-database/src/main/java/com/mall4j/cloud/common/database/interceptor/GeneratedKeyInterceptor.java b/mall4cloud-common/mall4cloud-common-database/src/main/java/com/mall4j/cloud/common/database/interceptor/GeneratedKeyInterceptor.java index ca55f28f..382209cc 100644 --- a/mall4cloud-common/mall4cloud-common-database/src/main/java/com/mall4j/cloud/common/database/interceptor/GeneratedKeyInterceptor.java +++ b/mall4cloud-common/mall4cloud-common-database/src/main/java/com/mall4j/cloud/common/database/interceptor/GeneratedKeyInterceptor.java @@ -78,37 +78,52 @@ public Object intercept(Invocation invocation) throws Throwable { // 找数据库中的对象 Object dbObject = findDbObject(parameter); + //这里如果批量插入只有list传递参数dbObject为null不会提前退出吗 list中的实体类的id还没有生成 if (dbObject == null) { return invocation.proceed(); } // 插入 - if (mappedStatement.getId().contains(INSERT) || mappedStatement.getId().contains(SAVE)){ - generatedKey(dbObject); + if (mappedStatement.getId().contains(INSERT) || mappedStatement.getId().contains(SAVE)) { + if (dbObject instanceof BaseModel) { + generatedKey(dbObject); + } } // 批量插入 - else if (mappedStatement.getId().contains(BATCH_INSERT) || mappedStatement.getId().contains(BATCH_SAVE)){ - // 获取批量查询的参数并生成主键 - if (parameter instanceof HashMap){ - Object list = ((Map)parameter).get("list"); - if (list instanceof ArrayList) { - for (Object o : (ArrayList) list) { - generatedKey(dbObject); + else if (mappedStatement.getId().contains(BATCH_INSERT) || mappedStatement.getId().contains(BATCH_SAVE)) { + if (parameter instanceof HashMap) { + //insert函数可能通过@Param指定不同的名字 通过“list” 可能会找不到list + //可以考虑通过类型来判断获取list类型 +// if (list instanceof ArrayList) { +// for (Object o : (ArrayList) list) { +// generatedKey(dbObject); //为什么要对dbObject调用generatedKey呢 不应该对list中的每一个baseModel调用吗 +// } +// } + //dbObject不仅可能是baseModel类也可能是List + if (dbObject instanceof ArrayList arrayList) { + if (!arrayList.isEmpty()) { + Object firstObject = arrayList.get(0); + if (findDbObject(firstObject) != null) { + for (Object o : arrayList) { + generatedKey(o); + } + } } } } } - return invocation.proceed(); } - protected BaseModel findDbObject(Object parameterObj) { + //不止返回baseModel 将可能的list也进行返回而不是通过“list”名称查找map中的潜在list类型参数 + //TODO 但是如果存在多个list如何解决 但是远来的代码中也存在这个问题只能找到map中的一个baseModel类型 可能是一个无需考虑的问题 + protected Object findDbObject(Object parameterObj) { if (parameterObj instanceof BaseModel) { - return (BaseModel)parameterObj; + return parameterObj; } else if (parameterObj instanceof Map) { for (Object val : ((Map) parameterObj).values()) { - if (val instanceof BaseModel) { - return (BaseModel)val; + if (val instanceof BaseModel || val instanceof ArrayList) { + return val; } } }