From 24212523d7af16acf01c06ca2285844626461cf0 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Sat, 14 Sep 2024 11:23:18 +0800 Subject: [PATCH] chain add map api --- .../yulichang/wrapper/interfaces/Chain.java | 42 +++++++++++++++++++ .../test/join/unit/ChainFirstTest.java | 18 ++++++++ 2 files changed, 60 insertions(+) diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java index f964357..a6cae6f 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/Chain.java @@ -7,6 +7,7 @@ import com.github.yulichang.interfaces.MPJBaseJoin; import com.github.yulichang.toolkit.SqlHelper; import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -124,4 +125,45 @@ public interface Chain extends MPJBaseJoin { default > P page(P page, Class resultType) { return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectJoinPage(page, resultType, this)); } + + /** + * 链式调用 + * 构造方法必须传 class 或 entity 否则会报错
+ * new MPJLambdaWrapper(User.class)
+ * JoinWrappers.lambda(User.class)
+ */ + default Map mapOne() { + return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectJoinMap(this)); + } + + /** + * 链式调用 + * 构造方法必须传 class 或 entity 否则会报错
+ * new MPJLambdaWrapper(User.class)
+ * JoinWrappers.lambda(User.class)
+ */ + default Map mapFirst() { + List> mapList = mapPage(new Page>(1, 1).setSearchCount(false)).getRecords(); + return Optional.of(mapList).filter(CollectionUtils::isNotEmpty).map(m -> m.get(0)).orElse(null); + } + + /** + * 链式调用 + * 构造方法必须传 class 或 entity 否则会报错
+ * new MPJLambdaWrapper(User.class)
+ * JoinWrappers.lambda(User.class)
+ */ + default List> mapList() { + return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectJoinMaps(this)); + } + + /** + * 链式调用 + * 构造方法必须传 class 或 entity 否则会报错
+ * new MPJLambdaWrapper(User.class)
+ * JoinWrappers.lambda(User.class)
+ */ + default

>> P mapPage(P page) { + return SqlHelper.exec(getEntityClass(), mapper -> mapper.selectJoinMapsPage(page, this)); + } } diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/ChainFirstTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/ChainFirstTest.java index 0f1df4c..0f1fbc5 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/ChainFirstTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/ChainFirstTest.java @@ -1,7 +1,9 @@ package com.github.yulichang.test.join.unit; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.test.join.entity.UserDO; import com.github.yulichang.test.util.Reset; +import com.github.yulichang.test.util.ThreadLocalUtils; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.UpdateJoinWrapper; @@ -43,4 +45,20 @@ public class ChainFirstTest { System.out.println(first); } + @Test + void chainFirst2() { + ThreadLocalUtils.set("SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, " + + "t.address_id2, t.del, t.create_by, t.update_by FROM `user` t WHERE t.del = false AND (t.id = ?)"); + System.out.println(JoinWrappers.lambda(UserDO.class).eq(UserDO::getId,1).mapOne()); + ThreadLocalUtils.set("SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, " + + "t.address_id2, t.del, t.create_by, t.update_by FROM `user` t WHERE t.del = false LIMIT ?"); + System.out.println(JoinWrappers.lambda(UserDO.class).mapFirst()); + ThreadLocalUtils.set("SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, " + + "t.address_id2, t.del, t.create_by, t.update_by FROM `user` t WHERE t.del = false"); + System.out.println(JoinWrappers.lambda(UserDO.class).mapList()); + ThreadLocalUtils.set("SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, t.create_time, t.address_id, " + + "t.address_id2, t.del, t.create_by, t.update_by FROM `user` t WHERE t.del = false LIMIT ?"); + System.out.println(JoinWrappers.lambda(UserDO.class).mapPage(new Page<>(1, 3))); + } + }