From 9e9420f4c6078a9d40de8d9ca612859e79377c71 Mon Sep 17 00:00:00 2001 From: liaozan <378024053@qq.com> Date: Tue, 29 Aug 2023 04:09:34 +0800 Subject: [PATCH] getMapByBizIds supports querying only required fields --- .../mybatis/base/BaseServiceImpl.java | 9 ++++-- .../mybatis/biz/BizIdColumnField.java | 8 ++--- .../mybatis/util/LambdaUtils.java | 31 +++++++++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/util/LambdaUtils.java diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java index b4a2cb4..d1a776e 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java @@ -12,6 +12,7 @@ import com.schbrain.framework.autoconfigure.mybatis.annotation.BizId; import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdColumnField; import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdHelper; import com.schbrain.framework.autoconfigure.mybatis.exception.NoSuchRecordException; +import com.schbrain.framework.autoconfigure.mybatis.util.LambdaUtils; import org.apache.ibatis.binding.MapperMethod.ParamMap; import org.springframework.beans.factory.InitializingBean; import org.springframework.transaction.annotation.Transactional; @@ -123,8 +124,12 @@ public class BaseServiceImpl, T extends BaseEntity> exte if (isEmpty(bizIds)) { return emptyMap(); } - // How to get the mapper column ? - return StreamUtils.toMap(listByBizIds(bizIds), entity -> getBidColumnField().getValue(entity), mapper); + String bizIdColumnName = getBidColumnField().getColumnName(); + List dataList = query() + .select(bizIdColumnName, LambdaUtils.getColumnName(mapper)) + .in(bizIdColumnName, bizIds) + .list(); + return StreamUtils.toMap(dataList, entity -> getBidColumnField().getValue(entity), mapper); } @Override diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java index ac2a0ee..035484e 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java @@ -34,9 +34,9 @@ public class BizIdColumnField { this.fieldType = bizIdField.getType(); try { Lookup lookup = privateLookupIn(entityClass, lookup()); - this.getter = lookup.findGetter(entityClass, bizIdField.getName(), fieldType); - this.setter = lookup.findSetter(entityClass, bizIdField.getName(), fieldType); - } catch (NoSuchFieldException | IllegalAccessException e) { + this.getter = lookup.unreflectGetter(bizIdField); + this.setter = lookup.unreflectSetter(bizIdField); + } catch (IllegalAccessException e) { throw new BaseException(e.getMessage(), e); } } @@ -58,4 +58,4 @@ public class BizIdColumnField { } } -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/util/LambdaUtils.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/util/LambdaUtils.java new file mode 100644 index 0000000..bc325c5 --- /dev/null +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/util/LambdaUtils.java @@ -0,0 +1,31 @@ +package com.schbrain.framework.autoconfigure.mybatis.util; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; + +/** + * @author liaozan + * @since 2023/8/29 + */ +public class LambdaUtils { + + public static String getColumnName(SFunction column) { + LambdaQueryWrapperExt query = new LambdaQueryWrapperExt<>(); + return query.columnToString(column); + } + + /** + * Extend LambdaQueryWrapper to expose columnToString method + */ + private static class LambdaQueryWrapperExt extends LambdaQueryWrapper { + + private static final long serialVersionUID = 943345355018736972L; + + @Override + protected String columnToString(SFunction column) { + return super.columnToString(column); + } + + } + +} -- GitLab