diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOne.java b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOne.java index 2686760ab088d8ea669b7215a5876e2e7c0d1c89..b5c692e5c1c44e7b185c41f57e0bd58ada6f60cb 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOne.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/main/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOne.java @@ -22,6 +22,7 @@ import org.dromara.streamquery.stream.core.stream.Steam; import java.io.Serializable; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.function.IntFunction; @@ -79,6 +80,22 @@ public class OneToOne, V> return query(HashMap::new); } + /** + * query order + * @return a {@link java.util.LinkedHashMap} object + */ + public Map queryLinked() { + return query(LinkedHashMap::new); + } + + /** + * query order + * @return a {@link java.util.LinkedHashMap} object + */ + public Map queryL() { + return queryLinked(); + } + /** * query. * diff --git a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOneTest.java b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOneTest.java index 011fb2decea6c2c93330c107e539e69259141f52..602fcb599265173ffc6a1de4d7ead069f2798684 100644 --- a/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOneTest.java +++ b/stream-plugin/stream-plugin-mybatis-plus/src/test/java/org/dromara/streamquery/stream/plugin/mybatisplus/OneToOneTest.java @@ -33,22 +33,97 @@ import java.util.Map; @MybatisPlusTest class OneToOneTest { + private final List USER_IDS = Arrays.asList(1L, 2L, 3L, 4L, 5L); + + @Test + void testOfEq(){ + Map idUserMap = OneToOne.of(UserInfo::getId).eq(1L).query(); + Assertions.assertEquals(1, idUserMap.size()); + + idUserMap = OneToOne.of(UserInfo::getId).eq(1L).eq(2L).query(); + Assertions.assertEquals(0, idUserMap.size()); + } + + @Test + void testOfValue(){ + Map idUserMap = OneToOne.of(UserInfo::getId).value(UserInfo::getName).query(); + Assertions.assertEquals(5, idUserMap.size()); + } + + @Test + void testOfIn(){ + Map idUserMap = OneToOne.of(UserInfo::getId).in(USER_IDS).query(); + Map userIdNameMap = OneToOne.of(UserInfo::getId).in(USER_IDS).value(UserInfo::getName).query(); + Assertions.assertEquals(5, idUserMap.size()); + Assertions.assertEquals(5, userIdNameMap.size()); + } + + @Test + void testOfConditionLe(){ + Map userMap = OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .condition(w -> w.le(UserInfo::getAge, 21)) + .query(); + Assertions.assertEquals(3, userMap.size()); + + userMap = OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .condition(w -> w.le(UserInfo::getAge, "21")) + .query(); + Assertions.assertEquals(3, userMap.size()); + } + + @Test + void testOfConditionSelect(){ + //TODO 错误 + Map userMap = OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .condition(w -> w.select(UserInfo::getAge)) + .query(); + userMap.forEach((k,v) -> System.out.println("userMap = " + k + "::" + v)); + Assertions.assertEquals(1, userMap.size()); + } + + @Test + void testOfConditionOrderBy(){ + //TODO 错误 + Map userMap = OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .condition(w -> w.orderBy(true,true,UserInfo::getAge)) + .query(); + userMap.forEach((k,v) -> System.out.println("userMap = " + k + "::" + v)); + Assertions.assertEquals(5, userMap.size()); + } + + /** + * 使用LinkedHashMap解决排序问题 + */ + @Test + void testOfConditionOrderByLinked(){ + //TODO 错误 + Map userMap = OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .condition(w -> w.orderBy(true,true,UserInfo::getAge)) + .queryL(); + userMap.forEach((k,v) -> System.out.println("userMap = " + k + "::" + v)); + Assertions.assertEquals(5, userMap.size()); + } + @Test void testQuery() { - List userIds = Arrays.asList(1L, 2L, 3L, 4L, 5L); - Map idUserMap = OneToOne.of(UserInfo::getId).in(userIds).query(); + Map idUserMap = OneToOne.of(UserInfo::getId).in(USER_IDS).query(); Assertions.assertEquals(5, idUserMap.size()); Map userIdNameMap = - OneToOne.of(UserInfo::getId).in(userIds).value(UserInfo::getName).query(); + OneToOne.of(UserInfo::getId).in(USER_IDS).value(UserInfo::getName).query(); Assertions.assertEquals(5, userIdNameMap.size()); userIdNameMap = - OneToOne.of(UserInfo::getId) - .in(userIds) - .value(UserInfo::getName) - .condition(w -> w.le(UserInfo::getAge, 22)) - .query(); + OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .value(UserInfo::getName) + .condition(w -> w.le(UserInfo::getAge, 22)) + .query(); Assertions.assertEquals(3, userIdNameMap.size()); idUserMap = OneToOne.of(UserInfo::getId).eq(1L).query(); @@ -58,19 +133,19 @@ class OneToOneTest { Assertions.assertEquals(1, userIdNameMap.size()); userIdNameMap = - OneToOne.of(UserInfo::getId) - .eq(1L) - .value(UserInfo::getName) - .condition(w -> w.le(UserInfo::getAge, 22)) - .query(); + OneToOne.of(UserInfo::getId) + .eq(1L) + .value(UserInfo::getName) + .condition(w -> w.le(UserInfo::getAge, 22)) + .query(); Assertions.assertEquals(1, userIdNameMap.size()); Map query = - OneToOne.of(UserInfo::getId) - .in(userIds) - .condition(w -> w.select(UserInfo::getId, UserInfo::getName)) - .value(userInfo -> userInfo.getName() != null && userInfo.getName().contains("a")) - .query(); + OneToOne.of(UserInfo::getId) + .in(USER_IDS) + .condition(w -> w.select(UserInfo::getId, UserInfo::getName)) + .value(userInfo -> userInfo.getName() != null && userInfo.getName().contains("a")) + .query(); Assertions.assertEquals(2, query.values().stream().filter(Boolean::booleanValue).count()); } }