From 1d5bb73af8852d8f3b2ba6c08a23f7818c383c7a Mon Sep 17 00:00:00 2001
From: "trifolium.wang"
Date: Wed, 26 Feb 2025 14:47:46 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=8A=A8=E6=80=81sq?=
=?UTF-8?q?lSource=E4=B8=8D=E8=83=BD=E8=87=AA=E5=8A=A8=E6=98=A0=E5=B0=84?=
=?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/rawresultmap/RawResultMapTest.java | 68 ++++++++++---------
.../mapper/rawresultmap/UserMapper.java | 10 +++
.../mapper/rawresultmap/UserMapper.xml | 22 +++++-
.../mapper/mapperhelper/MapperHelper.java | 47 ++++++-------
4 files changed, 88 insertions(+), 59 deletions(-)
diff --git a/base/src/test/java/tk/mybatis/mapper/rawresultmap/RawResultMapTest.java b/base/src/test/java/tk/mybatis/mapper/rawresultmap/RawResultMapTest.java
index 334a7e515..07a77a7dd 100644
--- a/base/src/test/java/tk/mybatis/mapper/rawresultmap/RawResultMapTest.java
+++ b/base/src/test/java/tk/mybatis/mapper/rawresultmap/RawResultMapTest.java
@@ -10,6 +10,7 @@
import java.io.IOException;
import java.io.Reader;
import java.net.URL;
+import java.util.Arrays;
import java.util.List;
/**
@@ -45,55 +46,56 @@ public void testSelect() {
System.out.println("------selectAll------");
users = mapper.selectAll();
- users.forEach(u -> {
- System.out.println(u);
- Assert.assertNotNull(u.getUname());
- Assert.assertNotNull(u.getAge());
- Assert.assertNotNull(u.getCreateTime());
- Assert.assertNull(u.getEmail());
- });
- System.out.println("------------");
+ userAssert(users);
+ System.out.println("###################");
System.out.println("------selectRawAnnotation------");
users = mapper.selectRawAnnotation();
- users.forEach(u -> {
- System.out.println(u);
- Assert.assertNotNull(u.getUname());
- Assert.assertNotNull(u.getAge());
- Assert.assertNotNull(u.getCreateTime());
- Assert.assertNotNull(u.getEmail());
- });
- System.out.println("------------");
+ userAssert(users);
+ System.out.println("###################");
+
+ System.out.println("------selectRawAnnotationResultMap------");
+ users = mapper.selectRawAnnotationResultMap();
+ userAssert(users);
+ System.out.println("###################");
System.out.println("------fetchRawResultMap------");
users = mapper.fetchRawResultMap();
- users.forEach(u -> {
- System.out.println(u);
- Assert.assertNotNull(u.getUname());
- Assert.assertNotNull(u.getAge());
- Assert.assertNotNull(u.getCreateTime());
- Assert.assertNotNull(u.getEmail());
- });
- System.out.println("------------");
+ userAssert(users);
+ System.out.println("###################");
+
+ System.out.println("------fetchDynamicResultMap------");
+ users = mapper.fetchDynamicResultMap();
+ userAssert(users);
+ System.out.println("###################");
System.out.println("------fetchRawResultType------");
users = mapper.fetchRawResultType();
- users.forEach(u -> {
- System.out.println(u);
- Assert.assertNotNull(u.getUname());
- Assert.assertNotNull(u.getAge());
- Assert.assertNotNull(u.getCreateTime());
- Assert.assertNotNull(u.getEmail());
- });
- System.out.println("------------");
+ userAssert(users);
+ System.out.println("###################");
+
+ System.out.println("------fetchDynamicSqlType------");
+ users = mapper.fetchDynamicSqlType(Arrays.asList(1, 2, 3));
+ userAssert(users);
+ System.out.println("###################");
System.out.println("------getMapUser------");
System.out.println(mapper.getMapUser());
- System.out.println("------------");
+ System.out.println("###################");
System.out.println(mapper.selectCount2());
+
} finally {
sqlSession.close();
}
}
+
+ private static void userAssert(List users) {
+ users.forEach(u -> {
+ System.out.println(u);
+ Assert.assertNotNull(u.getUname());
+ Assert.assertNotNull(u.getAge());
+ Assert.assertNotNull(u.getCreateTime());
+ });
+ }
}
diff --git a/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.java b/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.java
index 80a6f759b..707ad2288 100644
--- a/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.java
+++ b/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.java
@@ -1,5 +1,7 @@
package tk.mybatis.mapper.rawresultmap;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.BaseMapper;
@@ -15,10 +17,18 @@ public interface UserMapper extends BaseMapper {
@Select("SELECT * FROM user")
List selectRawAnnotation();
+ @Select("SELECT * FROM user")
+ @ResultMap("BaseResultMap")
+ List selectRawAnnotationResultMap();
+
List fetchRawResultType();
+ List fetchDynamicSqlType(@Param("ids") List ids);
+
List fetchRawResultMap();
+ List fetchDynamicResultMap();
+
Map getMapUser();
Integer selectCount2();
diff --git a/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.xml b/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.xml
index d23931675..d3b05a621 100644
--- a/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.xml
+++ b/base/src/test/java/tk/mybatis/mapper/rawresultmap/UserMapper.xml
@@ -9,7 +9,7 @@
-
+
@@ -17,10 +17,30 @@
select * from user
+
+
+
+
+
diff --git a/core/src/main/java/tk/mybatis/mapper/mapperhelper/MapperHelper.java b/core/src/main/java/tk/mybatis/mapper/mapperhelper/MapperHelper.java
index 6d12a2b9a..efc508c5b 100644
--- a/core/src/main/java/tk/mybatis/mapper/mapperhelper/MapperHelper.java
+++ b/core/src/main/java/tk/mybatis/mapper/mapperhelper/MapperHelper.java
@@ -33,9 +33,9 @@
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ResultMap;
+import org.apache.ibatis.mapping.ResultMapping;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.reflection.MetaObject;
-import org.apache.ibatis.scripting.defaults.RawSqlSource;
import org.apache.ibatis.session.Configuration;
import tk.mybatis.mapper.MapperException;
import tk.mybatis.mapper.annotation.RegisterMapper;
@@ -303,11 +303,27 @@ public void processMappedStatement(MappedStatement ms) {
setSqlSource(ms, mapperTemplate);
}
- // 如果是原生mybatisSqlSource的查询,添加ResultMap
- if (ms.getSqlSource() instanceof RawSqlSource
- && ms.getSqlCommandType() == SqlCommandType.SELECT) {
- if (ms.getResultMaps() != null && !ms.getResultMaps().isEmpty()) {
- setRawSqlSourceMapper(ms);
+ // 如果没有resultMaps, 有则设置一个默认的resultMaps
+ if (ms.getSqlCommandType() == SqlCommandType.SELECT) {
+ List resultMaps = ms.getResultMaps();
+ if (resultMaps != null) {
+ List modifiableResultMaps = new ArrayList<>(resultMaps);
+ for (int i = 0; i < resultMaps.size(); i++) {
+ List mappings = resultMaps.get(i).getResultMappings();
+ // 只有type,没有mappings的情况下
+ if (mappings == null || mappings.isEmpty()) {
+ EntityTable entityTable = EntityHelper.getEntityTableOrNull(resultMaps.get(i).getType());
+ // 如果有@Table注解,则可以获取到entityTable
+ if (entityTable != null) {
+ ResultMap resultMap = entityTable.getResultMap(ms.getConfiguration());
+ if (resultMap != null) {
+ modifiableResultMaps.set(i, resultMap);
+ MetaObject metaObject = MetaObjectUtil.forObject(ms);
+ metaObject.setValue("resultMaps", Collections.unmodifiableList(modifiableResultMaps));
+ }
+ }
+ }
+ }
}
}
}
@@ -396,23 +412,4 @@ public void setSqlSource(MappedStatement ms, MapperTemplate mapperTemplate) {
}
}
- /**
- * 设置原生Mybatis查询的实体映射,
- *
- * JPA的注解优先级将高于mybatis自动映射
- */
- public void setRawSqlSourceMapper(MappedStatement ms) {
-
- EntityTable entityTable = EntityHelper.getEntityTableOrNull(ms.getResultMaps().get(0).getType());
- if (entityTable != null) {
- List resultMaps = new ArrayList<>();
- ResultMap resultMap = entityTable.getResultMap(ms.getConfiguration());
- if (resultMap != null) {
- resultMaps.add(resultMap);
- MetaObject metaObject = MetaObjectUtil.forObject(ms);
- metaObject.setValue("resultMaps", Collections.unmodifiableList(resultMaps));
- }
- }
- }
-
}
\ No newline at end of file