BeanCopyUtils.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.ruoyi.common.utils;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.map.MapUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import cn.hutool.core.util.ReflectUtil;
  6. import cn.hutool.extra.cglib.CglibUtil;
  7. import lombok.AccessLevel;
  8. import lombok.NoArgsConstructor;
  9. import java.util.List;
  10. import java.util.Map;
  11. /**
  12. * bean深拷贝工具(基于 cglib 性能优异)
  13. *
  14. * @author Lion Li
  15. */
  16. @NoArgsConstructor(access = AccessLevel.PRIVATE)
  17. public class BeanCopyUtils {
  18. /**
  19. * 单对象基于class创建拷贝
  20. *
  21. * @param source 数据来源实体
  22. * @param desc 描述对象 转换后的对象
  23. * @return desc
  24. */
  25. public static <T, V> V copy(T source, Class<V> desc) {
  26. if (ObjectUtil.isNull(source)) {
  27. return null;
  28. }
  29. if (ObjectUtil.isNull(desc)) {
  30. return null;
  31. }
  32. return CglibUtil.copy(source, desc);
  33. }
  34. /**
  35. * 单对象基于对象创建拷贝
  36. *
  37. * @param source 数据来源实体
  38. * @param desc 转换后的对象
  39. * @return desc
  40. */
  41. public static <T, V> V copy(T source, V desc) {
  42. if (ObjectUtil.isNull(source)) {
  43. return null;
  44. }
  45. if (ObjectUtil.isNull(desc)) {
  46. return null;
  47. }
  48. CglibUtil.copy(source, desc);
  49. return desc;
  50. }
  51. /**
  52. * 列表对象基于class创建拷贝
  53. *
  54. * @param sourceList 数据来源实体列表
  55. * @param desc 描述对象 转换后的对象
  56. * @return desc
  57. */
  58. public static <T, V> List<V> copyList(List<T> sourceList, Class<V> desc) {
  59. if (ObjectUtil.isNull(sourceList)) {
  60. return null;
  61. }
  62. if (CollUtil.isEmpty(sourceList)) {
  63. return CollUtil.newArrayList();
  64. }
  65. return CglibUtil.copyList(sourceList, () -> ReflectUtil.newInstanceIfPossible(desc));
  66. }
  67. /**
  68. * bean拷贝到map
  69. *
  70. * @param bean 数据来源实体
  71. * @return map对象
  72. */
  73. public static <T> Map<String, Object> copyToMap(T bean) {
  74. if (ObjectUtil.isNull(bean)) {
  75. return null;
  76. }
  77. return CglibUtil.toMap(bean);
  78. }
  79. /**
  80. * map拷贝到bean
  81. *
  82. * @param map 数据来源
  83. * @param beanClass bean类
  84. * @return bean对象
  85. */
  86. public static <T> T mapToBean(Map<String, Object> map, Class<T> beanClass) {
  87. if (MapUtil.isEmpty(map)) {
  88. return null;
  89. }
  90. if (ObjectUtil.isNull(beanClass)) {
  91. return null;
  92. }
  93. return CglibUtil.toBean(map, beanClass);
  94. }
  95. /**
  96. * map拷贝到bean
  97. *
  98. * @param map 数据来源
  99. * @param bean bean对象
  100. * @return bean对象
  101. */
  102. public static <T> T mapToBean(Map<String, Object> map, T bean) {
  103. if (MapUtil.isEmpty(map)) {
  104. return null;
  105. }
  106. if (ObjectUtil.isNull(bean)) {
  107. return null;
  108. }
  109. return CglibUtil.fillBean(map, bean);
  110. }
  111. }