`

实体属性复制工具类

    博客分类:
  • 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、使用示例:将...

    一个开源的Java基础工具包

    一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据库配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${...

    基于模板的代码生成器LKGenerator1.1.0_x86

    (1)本工具提供了3中连接数据库的方式,分别是:MySql、Oracle、SqlServer,在界面上给出连接示例,方便进行复制和修改(减少因错误配置连接方式而带来了不能链接数据库问题)。配置正确后即可正确读取出数据库中的...

    基于模板的代码生成器LKGenerator1.1.0_x64

    ${field.alias}实体属性注解中的alias值,默认为属性名.可配置中文注释,生成代码时显示该注释. ${field.isKey}实体属性注解中的isKey值,boolean类型,配置后可以使用${bean.key}变量. ${field.isRequired}实体属性中的...

    ModelMaker Code Explorer 15.0.13.2378 (Delphi 代码增强工具)

    即时复制、粘贴和动态转换类、方法、属性等,甚至在类和模块之间。 使用实体洞察™ 更改(多个)选定成员的属性。 重新排列和排序代码,维护区域定义。 使用历史记录、方法收藏夹和成员搜索栏改进导航 实时文档...

    XMl实用大全(资料全易学习)

    14.10 使用xsl:copy复制当前节点 480 14.11 使用xsl:number为节点计数 483 14.11.1 缺省数值 484 14.11.2 数字到字符串的变换 486 14.12 对输出元素排序 488 14.13 CDATA和&lt;符 491 14.14 方式 493 14.15 使用xsl:...

    xml实用大全和轻松学习手册和无废话xml

    14.10 使用xsl:copy复制当前节点 480 14.11 使用xsl:number为节点计数 483 14.11.1 缺省数值 484 14.11.2 数字到字符串的变换 486 14.12 对输出元素排序 488 14.13 CDATA和&lt;符 491 14.14 方式 493 14.15 使用xsl:...

    XML实用大全----xml详细参考书

    1.3.3 浏览器和其他工具... 15 1.3.4 处理过程总结... 15 .4 相关技术... 17 1.4.1 超文本标记语言(Hypertext Markup Language)... 17 1.4.2 级联样式单(Cascading Style Sheets)... 17 1.4.3 可扩展的样式...

    XML实用大全(web开发必备手册)

    1.3.3 浏览器和其他工具... 15 1.3.4 处理过程总结... 15 .4 相关技术... 17 1.4.1 超文本标记语言(Hypertext Markup Language)... 17 1.4.2 级联样式单(Cascading Style Sheets)... 17 1.4.3 可扩展的样式...

    XML编程综合资料库

    1.3.3 浏览器和其他工具... 15 1.3.4 处理过程总结... 15 .4 相关技术... 17 1.4.1 超文本标记语言(Hypertext Markup Language)... 17 1.4.2 级联样式单(Cascading Style Sheets)... 17 1.4.3 可扩展的样式...

    JXMLPad v4.1

    支持Javabeans的用法用DTD, Schema, RelaxNG将标签和实体的语法补充完整(从光标当前位置开始)用户可自定义事件工具条实时语法错误检测智能分析(Schema 检测)几个用于XML的标准事件类(分析,查询和注释)实时...

    XML实用大全

    15 1.3.3 浏览器和其他工具... 15 1.3.4 处理过程总结... 15 4 相关技术... 17 1.4.1 超文本标记语言(Hypertext Markup Language)... 17 1.4.2 级联样式单(Cascading Style Sheets)... 17 ...

    arcgis工具

    利用JOIN 工具可以方便的实现与外界属性数据的关联,但这种关联是依赖于外界数据库本身的,需经过重新导出之后即完全保存在相应图层属性页。在做外联如EXCEL等的时候对数据有一些要求,确保第一行包含字段名,这些...

    DTOGenerator:从类生成 DTO 的 IntelliJIDEA 插件

    注意:如果一个属性扩展了 Collection 类,它将为您的 getter 创建前缀列表而不是 get。 (未来版本可能会使其成为一个选项)。 generate 还将创建一个 convertFromEntity 方法,该方法会将您的实体对象中的所有值...

    JAVA程序开发大全---上半部分

    13.4.2 反向工程生成JPA 实体类和Spring DAO类 242 13.4.3 创建测试类 243 13.5 本章小结 243 第14章 Web Service的开发及应用 244 14.1 Web Service概述 244 14.2 使用MyEclipse创建Web Service项目 245 14.2.1 ...

Global site tag (gtag.js) - Google Analytics