diff --git a/diboot-core-starter/src/test/java/diboot/core/test/service/BaseServiceTest.java b/diboot-core-starter/src/test/java/diboot/core/test/service/BaseServiceTest.java index fdfaf05eedae9a4fe176c8be8a064dba7bc8e34e..a6f73a737b28dd2d4b13a52213d452ac63da379d 100644 --- a/diboot-core-starter/src/test/java/diboot/core/test/service/BaseServiceTest.java +++ b/diboot-core-starter/src/test/java/diboot/core/test/service/BaseServiceTest.java @@ -15,6 +15,7 @@ */ package diboot.core.test.service; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -574,4 +575,18 @@ public class BaseServiceTest { } } + @Test + public void testGetVoListByChainQuery() { + // 测试 QueryChainWrapper 与 WrapperHelper.optimizeSelect 方法联动 + testGetVoListByChainQuery(dictionaryService.query().eq("parent_id", 0).eq("type", "GENDER")); + // 测试 LambdaQueryChainWrapper 与 WrapperHelper.optimizeSelect 方法联动 + testGetVoListByChainQuery(dictionaryService.lambdaQuery().eq(Dictionary::getParentId, 0).eq(Dictionary::getType, "GENDER")); + } + + private void testGetVoListByChainQuery(Wrapper query) { + List simpleVOList = dictionaryService.getViewObjectList(query, null, SimpleDictionaryVO.class); + Assert.assertEquals(1, simpleVOList.size()); + Assert.assertTrue(simpleVOList.get(0).getChildren().size() >= 2); + } + } diff --git a/diboot-core/src/main/java/com/diboot/core/binding/helper/WrapperHelper.java b/diboot-core/src/main/java/com/diboot/core/binding/helper/WrapperHelper.java index 9cef56d03620da3e0864486e71fa24a3e4224f6e..3095b57c9c29152bc18106a1a6d2bd83180bf8a6 100644 --- a/diboot-core/src/main/java/com/diboot/core/binding/helper/WrapperHelper.java +++ b/diboot-core/src/main/java/com/diboot/core/binding/helper/WrapperHelper.java @@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.Query; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; +import com.baomidou.mybatisplus.extension.conditions.query.ChainQuery; import com.diboot.core.binding.cache.BindingCacheManager; import com.diboot.core.config.Cons; import com.diboot.core.data.copy.Accept; @@ -71,6 +72,10 @@ public class WrapperHelper { * @param voClass */ public static void optimizeSelect(Wrapper query, Class entityClass, Class voClass) { + // 支持 ChainQuery + if (query instanceof ChainQuery) { + query = ((ChainQuery) query).getWrapper(); + } if (!(query instanceof Query) || query.getSqlSelect() != null) { return; } diff --git a/diboot-core/src/main/java/com/diboot/core/service/impl/BaseServiceImpl.java b/diboot-core/src/main/java/com/diboot/core/service/impl/BaseServiceImpl.java index 70cbfcc86ee1c380161457bd4590e4a11efbe328..801a0432f36953697a6b05f219cfc113489d68d4 100644 --- a/diboot-core/src/main/java/com/diboot/core/service/impl/BaseServiceImpl.java +++ b/diboot-core/src/main/java/com/diboot/core/service/impl/BaseServiceImpl.java @@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.LambdaUtils; import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.conditions.query.ChainQuery; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; @@ -518,6 +519,10 @@ public class BaseServiceImpl, T> extends ServiceImpl @Override public List getEntityList(Wrapper queryWrapper, Pagination pagination) { + // 支持 ChainQuery + if (queryWrapper instanceof ChainQuery) { + queryWrapper = ((ChainQuery) queryWrapper).getWrapper(); + } // 如果是动态join,则调用JoinsBinder if(queryWrapper instanceof DynamicJoinQueryWrapper){ return Binder.joinQueryList((DynamicJoinQueryWrapper)queryWrapper, entityClass, pagination);