diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java index b4b32c2..faebc59 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java @@ -270,7 +270,7 @@ public class MPJQueryWrapper extends AbstractWrapper join(String keyWord, boolean condition, String joinSql) { if (condition) { - from.setStringValue(from.getStringValue() + keyWord + joinSql); + from.setStringValue(from.getStringValue() + StringPool.EMPTY + keyWord + StringPool.EMPTY + joinSql); } return typedThis; } diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Constant.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Constant.java index 560225a..2eaffab 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Constant.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/Constant.java @@ -33,19 +33,19 @@ public interface Constant { String LEFT_JOIN = StringPool.SPACE + LEFT + StringPool.SPACE + JOIN + StringPool.SPACE; /** - * " RIGHT JOIN " + * "RIGHT JOIN" */ - String RIGHT_JOIN = StringPool.SPACE + RIGHT + StringPool.SPACE + JOIN + StringPool.SPACE; + String RIGHT_JOIN = RIGHT + StringPool.SPACE + JOIN; /** - * " INNER JOIN " + * "INNER JOIN" */ - String INNER_JOIN = StringPool.SPACE + INNER + StringPool.SPACE + JOIN + StringPool.SPACE; + String INNER_JOIN = INNER + StringPool.SPACE + JOIN; /** - * " FULL JOIN " + * "FULL JOIN" */ - String FULL_JOIN = StringPool.SPACE + FULL + StringPool.SPACE + JOIN + StringPool.SPACE; + String FULL_JOIN = FULL + StringPool.SPACE + JOIN; /** * " t" diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java index 10c0c22..b02bad9 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java @@ -191,7 +191,9 @@ public class MPJLambdaWrapper extends MPJAbstractLambdaWrapper wrapper : onWrappers) { String tableName = TableInfoHelper.getTableInfo(wrapper.getJoinClass()).getTableName(); - value.append(wrapper.getKeyWord()) + value.append(StringPool.SPACE) + .append(wrapper.getKeyWord()) + .append(StringPool.SPACE) .append(tableName) .append(Constant.SPACE_TABLE_ALIAS) .append(tableList.get(wrapper.getJoinClass(), wrapper.getIndex()).getIndex()) diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java index b3760de..9b6a0b9 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/interfaces/QueryJoin.java @@ -205,16 +205,66 @@ public interface QueryJoin extends MPJBaseJoin { return join(Constant.FULL_JOIN, clazz, function, ext); } - /** + * 自定义连表关键词 * 调用此方法 keyword 前后需要带空格 比如 " LEFT JOIN " " RIGHT JOIN " *

* 查询基类 可以直接调用此方法实现以上所有功能 * - * @param keyWord 连表关键字 - * @param clazz 连表实体类 - * @param function 关联条件 - * @param ext 扩展 用于关联表的 select 和 where + * @param keyWord 连表关键字 + * @param clazz 连表实体类 + * @param left 关联条件 + * @param right 扩展 用于关联表的 select 和 where + */ + default Children join(String keyWord, Class clazz, SFunction left, SFunction right) { + return join(keyWord, clazz, on -> on.eq(left, right)); + } + + /** + * 自定义连表关键词 + * + * @param left 条件 + * @param right 条件 + */ + default Children join(String keyWord, SFunction left, SFunction right) { + return join(keyWord, LambdaUtils.getEntityClass(left), on -> on.eq(left, right)); + } + + /** + * 自定义连表关键词 + *

+ * 例 leftJoin(UserDO.class, on -> on.eq(UserDO::getId,UserAddressDO::getUserId).le().gt()...) + * + * @param clazz 关联实体类 + * @param function 条件 + */ + default Children join(String keyWord, Class clazz, WrapperFunction function) { + return join(keyWord, clazz, function, null); + } + + /** + * 自定义连表关键词 + * + * @param clazz 关联的实体类 + * @param left 条件 + * @param right 条件 + */ + default Children join(String keyWord, Class clazz, SFunction left, SFunction right, WrapperFunction ext) { + return join(keyWord, clazz, on -> on.eq(left, right), ext); + } + + /** + * 自定义连表关键词 + * + * @param left 条件 + * @param right 条件 + */ + default Children join(String keyWord, SFunction left, SFunction right, WrapperFunction ext) { + return join(keyWord, LambdaUtils.getEntityClass(left), on -> on.eq(left, right), ext); + } + + /** + * 内部使用, 不建议直接调用 */ Children join(String keyWord, Class clazz, WrapperFunction function, WrapperFunction ext); } diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java index 24564f6..6656290 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java @@ -1,5 +1,6 @@ package com.github.yulichang.test.join; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.test.join.dto.AddressDTO; @@ -264,4 +265,15 @@ class LambdaWrapperTest { assert list.get(0).get("ADDRESS") != null; list.forEach(System.out::println); } + + /** + * 关联查询返回map + */ + @Test + void testMP() { + List dos = userMapper.selectList(new LambdaQueryWrapper() + .gt(UserDO::getId, 3) + .lt(UserDO::getId, 8)); + assert dos.size() == 4; + } }