BeanUtils

利用反射和注解,拷贝类型相同,属性名不同的对象

心不动则不痛 提交于 2020-02-27 03:12:03
1、前言 最近开发遇到一个问题,两个对象进行属性值拷贝。理论上来说可以直接借助org.springframework.beans.BeanUtils.copyProperties(Object source, Object target)来进行拷贝,奈何两个对象属性名不同,懵逼脸。 2、问题引入 待拷贝类 /** * @author : weenie * @version v1.0 * @Description: 源User */ public class OriginUser { /**id*/ private Long originId; /**名称*/ private String originName; /**密码*/ private String password; /**出生日期*/ private Date originBirthDay; /**是否健康*/ private Boolean originHealth; /**getter/setter省略*/ } 目标类 /** * @author : weenie * @version v1.0 * @Description: 目标User */ public class TargetUser { /**id*/ private Long targetId; /**名称*/ private String

BeanUtils.copyProperties不支持复制集合的解决方案

心不动则不痛 提交于 2020-01-07 09:36:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>   工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制。且不能复制集合和数组。本文会对该工具进行一些测试。文末会提出复制集合属性的解决方案。 准备工作:准备测试需要的类 @Data public class Class { private People[] member; private People teacher; private List<People> student; } @Data @NoArgsConstructor @AllArgsConstructor public class People { private Integer id; private String name; private Integer age; private Integer sex; } 测试代码:测试BeanUtils.copyProperties是否支持复制数组和集合,还有解决方案 public static void main(String[] args) { // 测试数组的复制 People[] member = new People[3]; member[0] = new People(1, "老师", 30, 1);

优雅的使用BeanUtils对List集合的操作

本小妞迷上赌 提交于 2020-01-06 13:41:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 摘要 我们在Entity、Bo、Vo层数据间可能经常转换数据,Entity对应的是持久层数据结构(一般是数据库表的映射模型)、Bo对应的是业务层操作的数据结构、Vo就是Controller和客户端交互的数据结构。在这些数据结构之间很大一部分属性都可能会相同,我们在使用的时候会不断的重新赋值。 如:客户端传输管理员信息的到Web层,我们会使用AdminVo接收,但是到了Service层时,我就需要使用AdminBo,这时候就需要把AdminVo实例的属性一个一个赋值到AdminBo实例中。 BeanUtils Spring 提供了 org.springframework.beans.BeanUtils 类进行快速赋值,如: AdminEntity类 public class AdminEntity{ private Integer id; private String password; private String username; private String userImg; .... //一些 Set Get方法 } AdminVo类,因为是和客户端打交道的,所以password属性就不适合在这里了 public class AdminVo{ private Integer id; private

BeanUtils手册

喜夏-厌秋 提交于 2019-12-27 12:30:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> BeanUtils手册 简介 概述 BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。 包 BeanUtils一共分4个包: org.apache.commons.beanutils org.apache.commons.beanutils.converters org.apache.commons.beanutils.locale org.apache.commons.beanutils.locale.converters 其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。其中上面两个没有针对本地化的任何处理,执行效率高。 入门 配置 Maven <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version> </dependency> 常用API // 把orig对象copy到dest对象中. public void

如何返回树状数据结构?

我与影子孤独终老i 提交于 2019-12-23 13:35:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、如何创建树状数据结构? 1、创建数据库表 City DROP TABLE IF EXISTS `city`; CREATE TABLE `city` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) DEFAULT NULL COMMENT '城市名', `name_en` varchar(255) DEFAULT NULL COMMENT '城市英文名', `parent_id` int(11) DEFAULT NULL COMMENT '父节点ID', `del` int(1) NOT NULL DEFAULT '0' COMMENT '假删除 0-未删除 1-已删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO `city` VALUES ('1', '江西省', 'JiangXi', '0', '0'); INSERT INTO `city` VALUES ('2', '赣州市', 'GanZhou', '1',

密码加密与微服务鉴权JWT --- 登录功能

∥☆過路亽.° 提交于 2019-12-23 09:04:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> [TOC] 前言 之前写了一篇:《 密码加密与微服务鉴权JWT详细使用教程 》 实际操作(练习实例) pom(common),在原有基础上添加jwt依赖 <dependencies> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> </dependency> <!--工具--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!--jwt依赖--> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId

Maven入门系列(五)——在STS应用Maven项目开发入门

假装没事ソ 提交于 2019-12-20 19:14:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我写这个入门系列只是想给那些“Maven是什么”的学弟和学妹们一个快速入门的帮助,为了纪念曾经也走了很多弯路的自己,即使自己也还有很长的路在前面。所以,各路神仙就不要说什么太基础之类的话吧,有那个时间陪陪老爸老妈、哄哄妹子、玩两局dota也比在网上喷人强。 有了之前的几个blog,那么在实际开发中maven是帮助我们的呢。 最大的帮助,就是当我们需要一个第三方组件和框架时,我不需要再各种官网和论坛内找各种各样的jar了。有时候组件之间可能存在依赖,导致我们时常遗漏。 (本文出自:http://my.oschina.net/u/1156339/blog/399311) 下面我举个例子。比如我现在想编写一个反射程序,用来修改Person类的属性值。我想利用beantuils来操作这一切。 平时,我一定会打开浏览器,到apache的官网去寻找beanutils的下载链接。但这已经成为过去。 现在我需要做的是,通过STS的Maven组件来管理项目中需要的资源。我只需要将beantils的GVA坐标,好吧,也许还是需到Maven Repo中央仓库去搜索这个GVA,然后把它提供的dependency复制到项目的POM.xml <project xmlns="http://maven.apache.org/POM/4.0.0

Bean 字段复制利器 MapStruct

蹲街弑〆低调 提交于 2019-12-16 11:33:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文聊一个工具类,MapStruct ,它是一个在 dto,po(do/entity),vo 等这些 pojo 中转换字段的一个工具,在应用中经常有这样的转换,在 spring 和 apache-commons 中也有 BeanUtils 复制,但不够灵活, 我之前也用反射写过一个字段复制 ,这种复制一般来是是很大量的,用反射会使系统的性能降低,有一种更高效的办法就是使用字节码工具类生成这些代码,这时在编译期就把代码弄好了,并且出错也好调试。 除了 MapStruct ,类似的工具还有 Spring 的 BeanUtils ,apachecommons 的 BeanUtils Dozer - Mapper that copies data from one object to another using annotations and API or XML configuration. JMapper - Uses byte code manipulation for lightning-fast mapping. Supports annotations and API or XML configuration. ModelMapper - Intelligent object mapping library

如何在Java中创建通用数组?

倖福魔咒の 提交于 2019-12-12 22:26:26
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 由于Java泛型的实现,因此不能有以下代码: public class GenSet<E> { private E a[]; public GenSet() { a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation } } 如何在保持类型安全的同时实现此目的? 我在Java论坛上看到了这样的解决方案: import java.lang.reflect.Array; class Stack<T> { public Stack(Class<T> clazz, int capacity) { array = (T[])Array.newInstance(clazz, capacity); } private final T[] array; } 但是我真的不知道发生了什么。 #1楼 一个简单但杂乱的解决方法是在主类中嵌套第二个“ holder”类,并使用它来保存数据。 public class Whatever<Thing>{ private class Holder<OtherThing>{ OtherThing thing; } public Holder<Thing>[] arrayOfHolders = new Holder

Java中支持深浅拷贝的第三方库

孤街醉人 提交于 2019-12-09 19:59:52
深拷贝 Apache旗下的Commons-Lang3包有一个序列化的工具 SerializationUtils ,可以做深拷贝。 当然前提是你的类实现了序列化接口。 Java Deep Cloning Library是我觉得最好用的一个。它的深拷贝通过反射实现,适合用于你 不能控制的第三方类或者没有实现序列化的类。 浅拷贝 还是Apache旗下,不过不是Commons-Lang3,而是Commons-Beanutils。其中 BeanUtils 提供了一个 cloneBean 方法。 可以直接简单的操作。 如果项目依赖了Spring的库,那么直接使用 BeanUtils 即可。 来源: oschina 链接: https://my.oschina.net/u/866802/blog/2964055