`

实体属性复制工具类

    博客分类:
  • J2SE
 
阅读更多
package com.bn.b2b.crp.utils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import com.alibaba.fastjson.JSONObject;

public class Dto2Entity {
	/**
	 * 父类DTO对象转换为实体对象。如命名不规范或其他原因导致失败
	 * @param t 源转换的对象
	 * @param e 目标转换的对象
	 * 
	 */
	public static <T,E> void transalte(T t,E e){
		Method[] tms=t.getClass().getSuperclass().getDeclaredMethods();
		Method[] tes=e.getClass().getSuperclass().getDeclaredMethods();
		for(Method m1:tms){
			if(m1.getName().startsWith("get")){
				String mNameSubfix=m1.getName().substring(3);
				String forName="set"+mNameSubfix;
				for(Method m2:tes){
					if(m2.getName().equals(forName)){
                        // 如果类型一致,或者m1的返回类型是m2的参数类型的父类或接口
						boolean canContinue = m1.getReturnType().isAssignableFrom(m2.getParameterTypes()[0]);
						if (canContinue) {
							try {
								m2.invoke(e, m1.invoke(t));
								break;
							} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
	
	
	/**
	 * DTO对象转换为实体对象。如命名不规范或其他原因导致失败
	 * @param t 源转换的对象
	 * @param e 目标转换的对象
	 * 
	 */
	public static <T,E> void transalte2(T t,E e){
		Method[] tms=t.getClass().getDeclaredMethods();
		Method[] tes=e.getClass().getDeclaredMethods();
		for(Method m1:tms){
			if(m1.getName().startsWith("get")){
				String mNameSubfix=m1.getName().substring(3);
				String forName="set"+mNameSubfix;
				for(Method m2:tes){
					if(m2.getName().equals(forName)){
                        // 如果类型一致,或者m1的返回类型是m2的参数类型的父类或接口
						boolean canContinue = m1.getReturnType().isAssignableFrom(m2.getParameterTypes()[0]);
						if (canContinue) {
							try {
								m2.invoke(e, m1.invoke(t));
								break;
							} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
	
	/**
	 * DTO对象转换为实体对象。如命名不规范或其他原因导致失败
	 * 源目标数据为空不转换
	 * @param t 源转换的对象
	 * @param e 目标转换的对象
	 * 
	 */
	public static <T,E> void transalte3(T t,E e){
		Method[] tms=t.getClass().getDeclaredMethods();
		Method[] tes=e.getClass().getDeclaredMethods();
		for(Method m1:tms){
			if(m1.getName().startsWith("get")){
				String mNameSubfix=m1.getName().substring(3);
				String forName="set"+mNameSubfix;
				for(Method m2:tes){
					if(m2.getName().equals(forName)){
                        // 如果类型一致,或者m1的返回类型是m2的参数类型的父类或接口
						boolean canContinue = m1.getReturnType().isAssignableFrom(m2.getParameterTypes()[0]);
						if (canContinue) {
							try {
								if(m1.invoke(t) != null)
								{
									m2.invoke(e, m1.invoke(t));
								}
								break;
							} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
		}
	}
	
	/**
	 * JSONObject对象转换为实体对象。如命名不规范或其他原因导致失败
	 * @param jsonObject 源json对象
	 * @param jsonKey json对象key
	 * @param dtoKey 目标对象属性
	 * @param clazz 目标转换的class
	 * @return
	 */
	public static <T> T jsonObj2Dto(JSONObject jsonObject, String[] jsonKey, String[] dtoKey, Class<T> clazz){
		for(int i = 0; i < jsonKey.length; i++)
		{
			if(jsonObject.containsKey(jsonKey[i]) && jsonObject.get(jsonKey[i]) != null)
			{
				jsonObject.put(dtoKey[i], jsonObject.get(jsonKey[i]));
			}
		}
		return JSONObject.toJavaObject(jsonObject, clazz);
	}
}

 

1
0
分享到:
评论

相关推荐

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    只需要复制数据库列名,支持多列复制,执行工具类即可生成对应的Java字段代码。 4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将...

    idea复制实体类工具

    "Idea复制实体类工具"是一个专门针对IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境所设计的插件,旨在帮助开发者更快速地生成和复制实体类。实体类在软件开发中通常用于封装数据库表中的数据,它们是数据...

    C# JSON实体类生成工具

    C# JSON实体类生成工具是一种高效实用的辅助开发软件,主要针对C#程序员设计,能够极大地简化处理JSON数据的工作流程。在C#编程环境中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,广泛应用于...

    Json生成实体类工具

    2. **准确性**:能准确地解析JSON结构,将键值对映射到实体类的属性,确保数据类型匹配。 3. **灵活性**:支持不同的序列化库,如Gson、Jackson或Fastjson,根据项目需求生成兼容的代码。 4. **自动化**:一键生成,...

    Java工具类之Apache的Commons Lang和BeanUtils

    Java工具类是开发过程中不可或缺的一部分,它们提供了许多实用的功能,帮助开发者提高代码的效率和可维护性。Apache Commons Lang和BeanUtils是两个非常著名的Java工具库,由Apache软件基金会开发和维护。这两个库...

    c#+SqlServer实体类生成工具

    《C# + SQL Server 实体类生成工具详解》 在软件开发过程中,数据访问层的构建往往是必不可少的一环,而实体类(Entity Class)作为连接业务逻辑与数据库的关键桥梁,其自动化生成能大大提高开发效率。本文将深入...

    基于java8新特性+反射机制实现list不同实体类互转.zip

    这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...

    Json转换成C#实体类工具

    4. 输出:生成的C#实体类代码以文本形式展示给用户,用户可以选择复制到剪贴板或者保存为.cs文件。 对于C#开发者来说,这样的工具能够无缝集成到他们的开发流程中,尤其是在处理API响应或序列化/反序列化过程中。...

    MYSQL 生成C#实体类

    标题提到的"MYSQL 生成C#实体类"是一个工具或者源码,它能帮助开发者自动生成对应于MySQL数据库表结构的C#实体类代码,但需要注意的是,这个工具可能不包含文件生成功能,仅提供代码文本输出。 首先,让我们理解...

    C#实体类生成工具 V1.0

    1. 手动输入字段生成:用户可以根据需求自定义字段名、数据类型等属性,工具会根据这些信息生成相应的C#实体类代码。 2. 自动从Access数据库生成:只需提供数据库连接信息,工具能够扫描数据库表结构,自动创建与之...

    SqlSugar生成实体类Demo

    5. **运行T4模板**: 右键点击模板文件,选择“运行定制工具”或直接在代码中调用`RunCustomTool()`方法,T4模板会自动生成实体类文件。 生成实体类后,我们可以利用SqlSugar进行CRUD操作。下面是一些基本操作的例子...

    C#实体类生成工具

    实体类通常包含属性(对应数据库列或API字段)和数据访问方法,如getter和setter。生成工具会根据数据库模式或JSON结构自动创建这些类,从而减少重复性工作。此外,许多工具还支持注释、数据验证规则以及与ORM框架...

    数据库分离工具及生成实体类

    1. **实体类**:在面向对象编程中,实体类是代表数据库表的类,通常包含与表字段对应的属性和对数据库操作的方法。这些类是ORM框架的基础,使得开发人员可以使用面向对象的方式来操作数据库。 2. **ORM(对象关系...

    json实体类生成器

    JSON实体类生成器是一种工具,它能够帮助程序员自动根据JSON格式的数据生成对应的C#或者其他编程语言的实体类。这样的工具极大地提高了开发效率,避免了手动编写繁琐的模型类代码,尤其是在处理大量的API接口或者...

    codesmith生成实体类简单模板

    一个基本的实体类模板可能包括类的命名、属性的声明以及属性的注释等部分。例如,模板可能会有以下结构: ```csharp foreach (Column column in Table.Columns) {#&gt; public &lt;%= column.DbType.CSharpType %&gt; ...

    Object ARX 参数化自定义实体的经典实例

    然后定义自定义实体类,继承自AutoCAD的基础实体类,如AcDbEntity或AcDbObject。自定义实体类中,我们需要定义参数变量,并实现相关的数据存储和读取方法,以保存和恢复实体的参数状态。 接下来,开发者会实现一个...

    idea实体类神器

    在Java编程中,实体类是数据传输对象(DTO)或持久...而通过安装和使用特定插件,如GenerateAllSetter,可以进一步优化开发体验,尤其是处理大量实体类属性时,能极大地减少重复劳动,让开发者更专注于业务逻辑的实现。

    android 浅复制和深复制-Java Generic Deep Copy 篇

    为了实现泛型深拷贝,我们可以创建一个通用的复制工具类。以下是一个简单的示例: ```java import java.util.ArrayList; import java.util.List; public class DeepCopyUtil&lt;T&gt; { public static ...

    java不同对象及集合的多次复制

    - **Apache Commons BeanUtils库**:提供了`BeanUtils.copyProperties()`方法,可以快速实现对象间的属性复制,但不支持自定义复制规则。 - **Dozer库**:允许使用注解来定义复制规则,支持深度复制和类型转换,...

Global site tag (gtag.js) - Google Analytics