From 7cf60642001238dfd1cbe522cdd842620855a59e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 27 Jul 2021 11:07:33 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=87=8D=E6=9E=84=20IServicePlus=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20=E5=A2=9E=E5=8A=A0=20BeanCopyUtils=20?= =?UTF-8?q?=E6=B7=B1=E6=8B=B7=E8=B4=9D=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/mybatisplus/core/IServicePlus.java | 92 ++++++++++++------- .../mybatisplus/core/ServicePlusImpl.java | 48 +++------- .../com/ruoyi/common/utils/BeanCopyUtils.java | 55 +++++++++++ 3 files changed, 129 insertions(+), 66 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/IServicePlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/IServicePlus.java index 069c6a71..710f11af 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/IServicePlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/IServicePlus.java @@ -20,30 +20,38 @@ import java.util.function.Function; */ public interface IServicePlus extends IService { - K getVoById(Serializable id, CopyOptions copyOptions, Class kClass); - - default K getVoById(Serializable id, CopyOptions copyOptions) { - return getVoById(id, copyOptions, null); - } + /** + * @param id 主键id + * @param copyOptions copy条件 + * @return K对象 + */ + K getVoById(Serializable id, CopyOptions copyOptions); default K getVoById(Serializable id) { return getVoById(id, new CopyOptions()); } + /** + * @param convertor 自定义转换器 + */ default K getVoById(Serializable id, Function convertor) { return convertor.apply(getById(id)); } - List listVoByIds(Collection idList, CopyOptions copyOptions, Class kClass); - - default List listVoByIds(Collection idList, CopyOptions copyOptions) { - return listVoByIds(idList, copyOptions, null); - } + /** + * @param idList id列表 + * @param copyOptions copy条件 + * @return K对象 + */ + List listVoByIds(Collection idList, CopyOptions copyOptions); default List listVoByIds(Collection idList) { return listVoByIds(idList, new CopyOptions()); } + /** + * @param convertor 自定义转换器 + */ default List listVoByIds(Collection idList, Function, List> convertor) { List list = getBaseMapper().selectBatchIds(idList); @@ -53,17 +61,20 @@ public interface IServicePlus extends IService { return convertor.apply(list); } - List listVoByMap(Map columnMap, CopyOptions copyOptions, Class kClass); - - default List listVoByMap(Map columnMap, CopyOptions copyOptions) { - return listVoByMap(columnMap, copyOptions, null); - } + /** + * @param columnMap 表字段 map 对象 + * @param copyOptions copy条件 + * @return K对象 + */ + List listVoByMap(Map columnMap, CopyOptions copyOptions); default List listVoByMap(Map columnMap) { return listVoByMap(columnMap, new CopyOptions()); } - + /** + * @param convertor 自定义转换器 + */ default List listVoByMap(Map columnMap, Function, List> convertor) { List list = getBaseMapper().selectByMap(columnMap); @@ -73,30 +84,38 @@ public interface IServicePlus extends IService { return convertor.apply(list); } - K getVoOne(Wrapper queryWrapper, CopyOptions copyOptions, Class kClass); - - default K getVoOne(Wrapper queryWrapper, CopyOptions copyOptions) { - return getVoOne(queryWrapper, copyOptions, null); - } + /** + * @param queryWrapper 查询条件 + * @param copyOptions copy条件 + * @return K对象 + */ + K getVoOne(Wrapper queryWrapper, CopyOptions copyOptions); default K getVoOne(Wrapper queryWrapper) { return getVoOne(queryWrapper, new CopyOptions()); } + /** + * @param convertor 自定义转换器 + */ default K getVoOne(Wrapper queryWrapper, Function convertor) { return convertor.apply(getOne(queryWrapper, true)); } - List listVo(Wrapper queryWrapper, CopyOptions copyOptions, Class kClass); - - default List listVo(Wrapper queryWrapper, CopyOptions copyOptions) { - return listVo(queryWrapper, copyOptions, null); - } + /** + * @param queryWrapper 查询条件 + * @param copyOptions copy条件 + * @return K对象 + */ + List listVo(Wrapper queryWrapper, CopyOptions copyOptions); default List listVo(Wrapper queryWrapper) { return listVo(queryWrapper, new CopyOptions()); } + /** + * @param convertor 自定义转换器 + */ default List listVo(Wrapper queryWrapper, Function, List> convertor) { List list = getBaseMapper().selectList(queryWrapper); if (list == null) { @@ -109,20 +128,28 @@ public interface IServicePlus extends IService { return listVo(Wrappers.emptyWrapper()); } + /** + * @param convertor 自定义转换器 + */ default List listVo(Function, List> convertor) { return listVo(Wrappers.emptyWrapper(), convertor); } - PagePlus pageVo(PagePlus page, Wrapper queryWrapper, CopyOptions copyOptions, Class kClass); - - default PagePlus pageVo(PagePlus page, Wrapper queryWrapper, CopyOptions copyOptions) { - return pageVo(page, queryWrapper, copyOptions, null); - } + /** + * @param page 分页对象 + * @param queryWrapper 查询条件 + * @param copyOptions copy条件 + * @return K对象 + */ + PagePlus pageVo(PagePlus page, Wrapper queryWrapper, CopyOptions copyOptions); default PagePlus pageVo(PagePlus page, Wrapper queryWrapper) { return pageVo(page, queryWrapper, new CopyOptions()); } + /** + * @param convertor 自定义转换器 + */ default PagePlus pageVo(PagePlus page, Wrapper queryWrapper, Function, List> convertor) { PagePlus result = getBaseMapper().selectPage(page, queryWrapper); @@ -133,6 +160,9 @@ public interface IServicePlus extends IService { return pageVo(page, Wrappers.emptyWrapper()); } + /** + * @param convertor 自定义转换器 + */ default PagePlus pageVo(PagePlus page, Function, List> convertor) { return pageVo(page, Wrappers.emptyWrapper(), convertor); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java index 5f0a82f6..4c339b80 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java @@ -1,12 +1,11 @@ package com.ruoyi.common.core.mybatisplus.core; -import cn.hutool.core.bean.copier.BeanCopier; import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.util.ReflectUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.ClassUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.page.PagePlus; +import com.ruoyi.common.utils.BeanCopyUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ResolvableType; @@ -15,7 +14,6 @@ import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * IServicePlus 实现类 @@ -125,9 +123,9 @@ public class ServicePlusImpl, T, K> extends ServiceI * @param id 主键ID */ @Override - public K getVoById(Serializable id, CopyOptions copyOptions, Class kClass) { + public K getVoById(Serializable id, CopyOptions copyOptions) { T t = getBaseMapper().selectById(id); - return oneVoCopy(t, copyOptions, kClass); + return BeanCopyUtils.oneCopy(t, copyOptions, voClass); } /** @@ -136,12 +134,12 @@ public class ServicePlusImpl, T, K> extends ServiceI * @param idList 主键ID列表 */ @Override - public List listVoByIds(Collection idList, CopyOptions copyOptions, Class kClass) { + public List listVoByIds(Collection idList, CopyOptions copyOptions) { List list = getBaseMapper().selectBatchIds(idList); if (list == null) { return null; } - return listVoCopy(list, copyOptions, kClass); + return BeanCopyUtils.listCopy(list, copyOptions, voClass); } /** @@ -150,12 +148,12 @@ public class ServicePlusImpl, T, K> extends ServiceI * @param columnMap 表字段 map 对象 */ @Override - public List listVoByMap(Map columnMap, CopyOptions copyOptions, Class kClass) { + public List listVoByMap(Map columnMap, CopyOptions copyOptions) { List list = getBaseMapper().selectByMap(columnMap); if (list == null) { return null; } - return listVoCopy(list, copyOptions, kClass); + return BeanCopyUtils.listCopy(list, copyOptions, voClass); } /** @@ -165,9 +163,9 @@ public class ServicePlusImpl, T, K> extends ServiceI * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @Override - public K getVoOne(Wrapper queryWrapper, CopyOptions copyOptions, Class kClass) { + public K getVoOne(Wrapper queryWrapper, CopyOptions copyOptions) { T t = getOne(queryWrapper, true); - return oneVoCopy(t, copyOptions, kClass); + return BeanCopyUtils.oneCopy(t, copyOptions, voClass); } /** @@ -176,12 +174,12 @@ public class ServicePlusImpl, T, K> extends ServiceI * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ @Override - public List listVo(Wrapper queryWrapper, CopyOptions copyOptions, Class kClass) { + public List listVo(Wrapper queryWrapper, CopyOptions copyOptions) { List list = getBaseMapper().selectList(queryWrapper); if (list == null) { return null; } - return listVoCopy(list, copyOptions, kClass); + return BeanCopyUtils.listCopy(list, copyOptions, voClass); } /** @@ -191,31 +189,11 @@ public class ServicePlusImpl, T, K> extends ServiceI * @param queryWrapper 实体对象封装操作类 */ @Override - public PagePlus pageVo(PagePlus page, Wrapper queryWrapper, CopyOptions copyOptions, Class kClass) { + public PagePlus pageVo(PagePlus page, Wrapper queryWrapper, CopyOptions copyOptions) { PagePlus result = getBaseMapper().selectPage(page, queryWrapper); - List volist = listVoCopy(result.getRecords(), copyOptions, kClass); + List volist = BeanCopyUtils.listCopy(result.getRecords(), copyOptions, voClass); result.setRecordsVo(volist); return result; } - private K oneVoCopy(T t, CopyOptions copyOptions, Class kClass) { - Class voClass = this.voClass; - if (kClass != null) { - voClass = kClass; - } - K k = ReflectUtil.newInstanceIfPossible(voClass); - return BeanCopier.create(t, k, copyOptions).copy(); - } - - private List listVoCopy(List list, CopyOptions copyOptions, Class kClass) { - Class voClass = this.voClass; - if (kClass != null) { - voClass = kClass; - } - final Class finalVoClass = voClass; - return list.stream() - .map(any -> BeanCopier.create(any, ReflectUtil.newInstanceIfPossible(finalVoClass), copyOptions).copy()) - .collect(Collectors.toList()); - } - } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java new file mode 100644 index 00000000..bea09f8b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java @@ -0,0 +1,55 @@ +package com.ruoyi.common.utils; + +import cn.hutool.core.bean.copier.BeanCopier; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.ReflectUtil; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * bean深拷贝工具 + * + * @author Lion Li + */ +public class BeanCopyUtils { + + /** + * 单对象基于class创建拷贝 + * + * @param source 数据来源实体 + * @param copyOptions copy条件 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static V oneCopy(T source, CopyOptions copyOptions, Class desc) { + V v = ReflectUtil.newInstanceIfPossible(desc); + return oneCopy(source, copyOptions, v); + } + + /** + * 单对象基于对象创建拷贝 + * + * @param source 数据来源实体 + * @param copyOptions copy条件 + * @param desc 转换后的对象 + * @return desc + */ + public static V oneCopy(T source, CopyOptions copyOptions, V desc) { + return BeanCopier.create(source, desc, copyOptions).copy(); + } + + /** + * 列表对象基于class创建拷贝 + * + * @param sourceList 数据来源实体列表 + * @param copyOptions copy条件 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static List listCopy(List sourceList, CopyOptions copyOptions, Class desc) { + return sourceList.stream() + .map(source -> oneCopy(source, copyOptions, desc)) + .collect(Collectors.toList()); + } +}