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); } }
相关推荐
只需要复制数据库列名,支持多列复制,执行工具类即可生成对应的Java字段代码。 4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将...
"Idea复制实体类工具"是一个专门针对IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境所设计的插件,旨在帮助开发者更快速地生成和复制实体类。实体类在软件开发中通常用于封装数据库表中的数据,它们是数据...
C# JSON实体类生成工具是一种高效实用的辅助开发软件,主要针对C#程序员设计,能够极大地简化处理JSON数据的工作流程。在C#编程环境中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,广泛应用于...
2. **准确性**:能准确地解析JSON结构,将键值对映射到实体类的属性,确保数据类型匹配。 3. **灵活性**:支持不同的序列化库,如Gson、Jackson或Fastjson,根据项目需求生成兼容的代码。 4. **自动化**:一键生成,...
Java工具类是开发过程中不可或缺的一部分,它们提供了许多实用的功能,帮助开发者提高代码的效率和可维护性。Apache Commons Lang和BeanUtils是两个非常著名的Java工具库,由Apache软件基金会开发和维护。这两个库...
《C# + SQL Server 实体类生成工具详解》 在软件开发过程中,数据访问层的构建往往是必不可少的一环,而实体类(Entity Class)作为连接业务逻辑与数据库的关键桥梁,其自动化生成能大大提高开发效率。本文将深入...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
4. 输出:生成的C#实体类代码以文本形式展示给用户,用户可以选择复制到剪贴板或者保存为.cs文件。 对于C#开发者来说,这样的工具能够无缝集成到他们的开发流程中,尤其是在处理API响应或序列化/反序列化过程中。...
标题提到的"MYSQL 生成C#实体类"是一个工具或者源码,它能帮助开发者自动生成对应于MySQL数据库表结构的C#实体类代码,但需要注意的是,这个工具可能不包含文件生成功能,仅提供代码文本输出。 首先,让我们理解...
1. 手动输入字段生成:用户可以根据需求自定义字段名、数据类型等属性,工具会根据这些信息生成相应的C#实体类代码。 2. 自动从Access数据库生成:只需提供数据库连接信息,工具能够扫描数据库表结构,自动创建与之...
5. **运行T4模板**: 右键点击模板文件,选择“运行定制工具”或直接在代码中调用`RunCustomTool()`方法,T4模板会自动生成实体类文件。 生成实体类后,我们可以利用SqlSugar进行CRUD操作。下面是一些基本操作的例子...
实体类通常包含属性(对应数据库列或API字段)和数据访问方法,如getter和setter。生成工具会根据数据库模式或JSON结构自动创建这些类,从而减少重复性工作。此外,许多工具还支持注释、数据验证规则以及与ORM框架...
1. **实体类**:在面向对象编程中,实体类是代表数据库表的类,通常包含与表字段对应的属性和对数据库操作的方法。这些类是ORM框架的基础,使得开发人员可以使用面向对象的方式来操作数据库。 2. **ORM(对象关系...
JSON实体类生成器是一种工具,它能够帮助程序员自动根据JSON格式的数据生成对应的C#或者其他编程语言的实体类。这样的工具极大地提高了开发效率,避免了手动编写繁琐的模型类代码,尤其是在处理大量的API接口或者...
一个基本的实体类模板可能包括类的命名、属性的声明以及属性的注释等部分。例如,模板可能会有以下结构: ```csharp foreach (Column column in Table.Columns) {#> public <%= column.DbType.CSharpType %> ...
然后定义自定义实体类,继承自AutoCAD的基础实体类,如AcDbEntity或AcDbObject。自定义实体类中,我们需要定义参数变量,并实现相关的数据存储和读取方法,以保存和恢复实体的参数状态。 接下来,开发者会实现一个...
在Java编程中,实体类是数据传输对象(DTO)或持久...而通过安装和使用特定插件,如GenerateAllSetter,可以进一步优化开发体验,尤其是处理大量实体类属性时,能极大地减少重复劳动,让开发者更专注于业务逻辑的实现。
为了实现泛型深拷贝,我们可以创建一个通用的复制工具类。以下是一个简单的示例: ```java import java.util.ArrayList; import java.util.List; public class DeepCopyUtil<T> { public static ...
- **Apache Commons BeanUtils库**:提供了`BeanUtils.copyProperties()`方法,可以快速实现对象间的属性复制,但不支持自定义复制规则。 - **Dozer库**:允许使用注解来定义复制规则,支持深度复制和类型转换,...