From 9cce295122d1d9d2571d475b0fd09bd04a1f298d Mon Sep 17 00:00:00 2001 From: mawen12 <1181963012mw@gmail.com> Date: Thu, 26 Sep 2024 14:26:52 +0800 Subject: [PATCH 1/5] optimize mapper builder --- .../org/apache/ibatis/builder/xml/XMLMapperBuilder.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java index ea2577381e3..15dda9f2a37 100644 --- a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java @@ -161,9 +161,9 @@ private void cacheRefElement(XNode context) { private void cacheElement(XNode context) { if (context != null) { String type = context.getStringAttribute("type", "PERPETUAL"); - Class typeClass = typeAliasRegistry.resolveAlias(type); + Class typeClass = resolveAlias(type); String eviction = context.getStringAttribute("eviction", "LRU"); - Class evictionClass = typeAliasRegistry.resolveAlias(eviction); + Class evictionClass = resolveAlias(eviction); Long flushInterval = context.getLongAttribute("flushInterval"); Integer size = context.getIntAttribute("size"); boolean readWrite = !context.getBooleanAttribute("readOnly", false); @@ -239,7 +239,7 @@ private ResultMap resultMapElement(XNode resultMapNode, List addi resultMappings.add(buildResultMappingFromContext(resultChild, typeClass, flags)); } } - String id = resultMapNode.getStringAttribute("id", resultMapNode.getValueBasedIdentifier()); + String id = resultMapNode.getStringAttribute("id", resultMapNode::getValueBasedIdentifier); String extend = resultMapNode.getStringAttribute("extends"); Boolean autoMapping = resultMapNode.getBooleanAttribute("autoMapping"); ResultMapResolver resultMapResolver = new ResultMapResolver(builderAssistant, id, typeClass, extend, discriminator, @@ -289,8 +289,7 @@ private Discriminator processDiscriminatorElement(XNode context, Class result Map discriminatorMap = new HashMap<>(); for (XNode caseChild : context.getChildren()) { String value = caseChild.getStringAttribute("value"); - String resultMap = caseChild.getStringAttribute("resultMap", - processNestedResultMappings(caseChild, resultMappings, resultType)); + String resultMap = caseChild.getStringAttribute("resultMap", () -> processNestedResultMappings(caseChild, resultMappings, resultType)); discriminatorMap.put(value, resultMap); } return builderAssistant.buildDiscriminator(resultType, column, javaTypeClass, jdbcTypeEnum, typeHandlerClass, From 9bfbfe4e3f5056059fd943721351648c3a68e492 Mon Sep 17 00:00:00 2001 From: mawen12 <1181963012mw@gmail.com> Date: Sun, 29 Sep 2024 11:14:12 +0800 Subject: [PATCH 2/5] add more test cases --- .../ibatis/type/TypeAliasRegistryTest.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java index b2b2b8df982..2673f4743e1 100644 --- a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java +++ b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java @@ -15,14 +15,13 @@ */ package org.apache.ibatis.type; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; - import java.math.BigDecimal; import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; + class TypeAliasRegistryTest { @Test @@ -75,4 +74,21 @@ void shouldFetchCharType() { assertEquals(char[].class, typeAliasRegistry.resolveAlias("_char[]")); } + @Test + void shouldNotBeAbleToRegisterAliasWithEmptyString() { + TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry(); + + assertThatThrownBy(() -> typeAliasRegistry.registerAlias("foo", "")) + .isInstanceOf(TypeException.class) + .hasMessageContaining("Error registering type alias foo for"); + } + + @Test + void shouldNotBeAbleToResolveNotExistsAlias() { + TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry(); + + assertThatThrownBy(() -> typeAliasRegistry.resolveAlias("abc")) + .isInstanceOf(TypeException.class) + .hasMessageContaining("Could not resolve type alias 'abc'. Cause: java.lang.ClassNotFoundException: Cannot find class: abc"); + } } From bf065014fab8880ac3e5f936155cd0f8dc08806d Mon Sep 17 00:00:00 2001 From: Jeremy Landis Date: Fri, 27 Dec 2024 21:40:48 -0500 Subject: [PATCH 3/5] Update TypeAliasRegistryTest.java --- .../org/apache/ibatis/type/TypeAliasRegistryTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java index 2673f4743e1..6016f9ecd48 100644 --- a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java +++ b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java @@ -15,13 +15,15 @@ */ package org.apache.ibatis.type; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertThrows; + import java.math.BigDecimal; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; - class TypeAliasRegistryTest { @Test From b9af5ccaca320b8ff47b08b7beb2003b09b2f735 Mon Sep 17 00:00:00 2001 From: Jeremy Landis Date: Fri, 27 Dec 2024 21:42:34 -0500 Subject: [PATCH 4/5] Update TypeAliasRegistryTest.java --- src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java index 6016f9ecd48..b70b1a2153d 100644 --- a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java +++ b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java @@ -15,9 +15,9 @@ */ package org.apache.ibatis.type; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; From 85bd9bab66ecf11a8f040e419cb886ee73e60eb1 Mon Sep 17 00:00:00 2001 From: mawen12 <1181963012mw@gmail.com> Date: Sat, 28 Dec 2024 13:08:07 +0800 Subject: [PATCH 5/5] undo XMLMapperBuilder changes --- .../java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java index 15dda9f2a37..a652a13b0e0 100644 --- a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java @@ -161,9 +161,9 @@ private void cacheRefElement(XNode context) { private void cacheElement(XNode context) { if (context != null) { String type = context.getStringAttribute("type", "PERPETUAL"); - Class typeClass = resolveAlias(type); + Class typeClass = typeAliasRegistry.resolveAlias(type); String eviction = context.getStringAttribute("eviction", "LRU"); - Class evictionClass = resolveAlias(eviction); + Class evictionClass = typeAliasRegistry.resolveAlias(eviction); Long flushInterval = context.getLongAttribute("flushInterval"); Integer size = context.getIntAttribute("size"); boolean readWrite = !context.getBooleanAttribute("readOnly", false);