diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java index 8f4da91..952bdbd 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/WrapperUtils.java @@ -45,6 +45,7 @@ public class WrapperUtils implements StringPool { String sqlSegment = (wrapper.getSqlSegment() != null && StrUtils.isNotBlank(wrapper.getSqlSegment())) ? ((wrapper.isEmptyOfNormal() ? EMPTY : (hasWhere ? " AND " : " WHERE ")) + wrapper.getSqlSegment()) : EMPTY; String sqlComment = Optional.ofNullable(wrapper.getSqlComment()).orElse(EMPTY); + String sqlUnion = wrapper.getUnionSql(); StringBuilder sb = new StringBuilder(SPACE) .append(first) .append(" SELECT ") @@ -63,6 +64,8 @@ public class WrapperUtils implements StringPool { .append(sqlSegment) .append(SPACE) .append(sqlComment) + .append(SPACE) + .append(sqlUnion) .append(SPACE); if (brackets) { sb.insert(0, "(").append(")"); diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/FromTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/FromTest.java index 5cf7bf9..1df24ea 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/FromTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/FromTest.java @@ -43,4 +43,32 @@ public class FromTest { .ge(UserDO::getId, 0)); wrapper.list(); } + + @Test + void from1() { + 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 (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 >= ?) + UNION ALL + (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)) t + WHERE t.del = false + """); + MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class) + .selectAll() + .from(from -> from + .selectAll() + .ge(UserDO::getId, 0) + .unionAll(UserDO.class, MPJLambdaWrapper::selectAll)); + wrapper.list(); + } }