Bean 字段复制利器 MapStruct】的更多相关文章

本文聊一个工具类,MapStruct ,它是一个在 dto,po(do/entity),vo 等这些 pojo 中转换字段的一个工具,在应用中经常有这样的转换,在 spring 和 apache-commons 中也有 BeanUtils 复制,但不够灵活,我之前也用反射写过一个字段复制,这种复制一般来是是很大量的,用反射会使系统的性能降低,有一种更高效的办法就是使用字节码工具类生成这些代码,这时在编译期就把代码弄好了,并且出错也好调试. 除了 MapStruct ,类似的工具还有 Spring…
@Setter @Getter public class SourceA { private String name; private String text; public SourceA(String name, String text) { this.name = name; this.text = text; } } @Setter @Getter @ToString public class TargetB { @FieldMap(name = "name") public…
我们之前说到项目中会用到各种object,vo,bo,dto等等.我们需要在不同的对象上复制属性. 一.BeanUtils和PropertyUtils 我们最常用的就是Common包里面的BeanUtils,或者Spring里面的BeanUtils. BeanUtils.copyProperties(dest, orig); 还有一个PropertyUtils PropertyUtils.copyProperties(dest, orig); 它俩区别: BeanUtils和PropertyUt…
当遇到复杂多表查询时,并且同时还需要确保查询性能,此时则需要使用自定义sql查询,然而spring data jpa对于自定义sql则需使用查询需要在对应的bean中做太多的配置映射,我尝试了一下,最终还是没成功.故选择了另一种方式来解决. String sql = "select a.name,b.className,a.createTime from A a left join B b on a.id = b.id"; Query query = entityManager.cre…
上一篇讲到JavaBeans的属性编辑器,编写自己的属性编辑器,需要继承PropertyEditorSupport,编写自己的BeanInfo,需要继承SimpleBeanInfo,然后在BeanInfo中把特定的属性编辑器和需要编辑的属性绑定起来(详情请查看上一篇). Spring的属性编辑器仅负责将配置文件中的字面值转换成Bean属性的对应值.(而JavaBean的属性编辑器能够通过界面来手动设置bean属性的值).如果属性的类型不同,转换的方法就不同.正如javabean的属性编辑器一样,…
import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(maker.getBaseInfo(), newBasInfo,new String[]{"de"}); 第一个参数:原数据 第二个参数:新数据 第三个参数: 忽略不复制属性…
使用SpringAop 验证方法参数是否合法   先定义两个注解类ValidateGroup 和 ValidateFiled ValidateGroup .java package com.zf.ann; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annot…
try { //获取满足条件的数据 DataTable Mdr = datable.Select().ToString("yyyy-MM-dd HH:mm:ss") + "' ").CopyToDataTable(); //去重筛选出两列,执行任务时不能有多个任务同时 执行. DataTable NoRDt = Mdr.DefaultView.ToTable(true, "ProNO", "ApiCode"); DevHelp…
直接上代码吧: Field field; Field[] fields=clas.getDeclaredFields(); for (int i = 0; i <fields.length ; i++) { fields[i].setAccessible(true); } for (int i = 0; i <fields.length ; i++) { field=clas.getDeclaredField(fields[i].getName()); Column column=field.…
今天在工作中,需要造大量的加数据,1000多条数据如果都是手工输入的话,那么我今天不要干别的了,就造吧! 当时手工操作重复的事情,对程序员来说,是一件很丢人的事情,所以就上网查了一下,需要用到两个知识点.1  表复制    2字段的部分替换 表复制 Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,…
select  字段1,字段2,字段3 into tempname  form  table  where table.id=1; oralce : insert into MID_DRUG_DETAIL( 字段1,字段2,字段3 )select a,b,c from table ; --把table表中的a,b,c对应插入到MID_DRUG_DETAIL表中 这个会给tempname 表中自动生成  字段1,字段2,字段3  三个字段以及值. oracle 备份表 create table日期…
需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举的key和value. 枚举注解: import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.…
MapStruct GitHub 访问地址 : https://github.com/mapstruct/mapstruct/ 使用例子 : https://github.com/mapstruct/mapstruct-examples MapStrcut与其它工具对比以及使用说明! http://www.tuicool.com/articles/uiIRjai 是否一直在使用BeanUtils.copyProperties 用于对象属性拷贝. 出现种种小问题. 会将同名属性拷贝到另外一个对象中…
本文由 JavaGuide 翻译自 https://www.baeldung.com/java-performance-mapping-frameworks .转载请注明原文地址以及翻译作者. 1. 介绍 创建由多个层组成的大型 Java 应用程序需要使用多种领域模型,如持久化模型.领域模型或者所谓的 DTO.为不同的应用程序层使用多个模型将要求我们提供 bean 之间的映射方法.手动执行此操作可以快速创建大量样板代码并消耗大量时间.幸运的是,Java 有多个对象映射框架.在本教程中,我们将比较…
常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanUtils这种通过反射,它通过编译器编译生成常规方法,将可以很大程度上提升效率.@pdai 为什么会引入MapStruct这类工具 首先看下这类工具出现的背景.@pdai JavaBean 问题引入 在开发的时候经常会有业务代码之间有很多的 JavaBean 之间的相互转化,比如PO/DTO/VO/Q…
常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanUtils这种通过反射,它通过编译器编译生成常规方法,将可以很大程度上提升效率.@pdai 为什么会引入MapStruct这类工具 首先看下这类工具出现的背景.@pdai JavaBean 问题引入 在开发的时候经常会有业务代码之间有很多的 JavaBean 之间的相互转化,比如PO/DTO/VO/Q…
Apache BeanUtils Spring BeanUtils cglib BeanCopier Hutool BeanUtil Mapstruct Dozer 1.Apache  BeanUtils: 在Bean中具有相同名称的属性分别是基本数据类型和包装类时,比如分别是int和Integer时,可以正常进行拷贝,在拷贝中,如果存在引用对象,那么使用的是浅拷贝. 使用===========>BeanUtils.copyProperties(orderDTO,orderPO);[第一个是目标…
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 ApplicationContext 的具体实现类,因为对应的 Spring IoC 容器功能相对强大. 而在 Spring 中提供了 3 种方法进行配置: 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 在现实的工作中,这 3 种方…
Java的bean的属性复制,大家可以都看一下. 谈谈Java开发中的对象拷贝http://www.wtnull.com/view/2/e6a7a8818da742758bcd8b73d49d6be2.html Java Bean 属性复制的几种框架比较http://www.jianshu.com/p/4c4c51f06b53 Easy-mapper – 一个灵活可扩展的高性能Bean mapping类库http://neoremind.com/2016/08/easy-mapper-%E4%B…
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 ApplicationContext 的具体实现类,因为对应的 Spring IoC 容器功能相对强大. 而在 Spring 中提供了 3 种方法进行配置: 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 在现实的工作中,这 3 种方…
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句 语…
从理论上讲,有一个简单到难以置信的解决办法:SPListItem提供了一个CopyTo(destinationUrl)方法(可参考MSDN).不幸的是,这个方法似乎用不了.至少对我的情况(一个带附件的自定义列表)是如此.总是告诉我找不到源列表项,没有读取权限,或者列表没有发布等等.从网上找到很多帖子,其他人也遇到同样的问题.最好的解决方案就是自己实现. 首先设计方法的参数和返回值类型: ? 1 public static SPListItem CopyItem(SPListItem source…
[不定时更新] 1.将一张表中部分记录的一或多个字段复制到另一张表中: 表A: 表B: 执行SQL: insert into B(f_userId,f_nickname) select f_telephone,f_username from A; 表B结果:…
Object.MemberwiseClone 方法 创建当前 Object 的浅表副本. protected Object MemberwiseClone() MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象. 如果字段是值类型的,则对该字段执行逐位复制. 如果字段是引用类型,则复制引用但不复制引用的对象:因此,原始对象及其复本引用同一对象. 例如,考虑对象X引用对象 A 和 B , 对象 B 依次引用对象 C. X 的浅表副本…
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,如将 一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句…
在.net framework中,提供了ICloneable接口来对对象进行克隆.当然,你也可以不去实现ICloneable接口而直接自己定义一个Clone()方法,当然,还是推荐实现ICloneable接口. 具体实现方法 using UnityEngine; using System.Collections; using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Seri…
编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1;   等价于: int a = 1; 这种语法不仅增强了代码的可读性,其生成的IL代码与使用System.Int32时生成的IL代码是完全一致的.   编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型.如C#中,i…
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句 语…
我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 注意:(1)要求目标表Table2必须存在,并且字段fie…
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,如将 一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句…