package cn.com.servyou.fkpt.core.base.bean; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import cn.com.servyou.fkpt.core.fak.bean.Fxfa; /** * <p> * 标题: BeanUtil.java * </p> * <p> * 描述: 根据bean快速生成dao参数的工具类 * </p> * <p> * </p> * <p> * 创建时间: 2015-1-4 * </p> * <p> * 作者:zhuw * </p> */ public class BeanUtil { /** * 需要生成的bean类 此处需要修改成你所要的类 */ public static Class cls = Fxfa.class; /** * DAOParamGenerator 的参数名 如果需要修改则修改此变量 */ public static String paramName = "pg"; /** * 生成类型 false非批量 /true 批量 如果是批量的要修改成true */ public static boolean batch = true; /** * batch为true时生效 dao的第几个sql默认为0 */ public static String sqlIndex = "0"; /** * batch为true时生效 for循环的参数名称默认为i */ public static String forParam = "i"; public static void main(String[] args) { System.out.println(writeDao(cls)); } /** * 控制台输出代码 */ public static String writeDao(Class cls) { String cname = cls.getName(); cname = cname.substring(cname.lastIndexOf(".") + 1, cname.length()); className = cname; String firstZm = String.valueOf(cname.charAt(0)); classNameXx = cname.replaceFirst(firstZm, firstZm.toLowerCase()); try { return writeMethod(writeDAOParamGenerator(writeAttr(cls))).toString(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return ""; } private static String className; private static String classNameXx; /** * 写入方法 */ public static StringBuilder writeMethod(StringBuilder content) { StringBuilder sb = new StringBuilder(); if (batch) { sb.append(" public DAOParamGenerator getDaoParam(List<" + className + "> " + classNameXx + "List) {\n"); } else { sb.append(" public DAOParamGenerator getDaoParam(" + className + " " + classNameXx + ") {\n"); } sb.append(content); sb.append(" }"); return sb; } /** * 写入参数 */ public static StringBuilder writeDAOParamGenerator(StringBuilder attr) { StringBuilder sb = new StringBuilder(); sb.append(" DAOParamGenerator " + paramName + " = new DAOParamGenerator();\n"); sb.append(attr); sb.append(" return " + paramName + ";\n"); List<Fxfa> list = new ArrayList<Fxfa>(); for (int i = 0; i < list.size(); i++) { Fxfa fxfa = list.get(i); } return sb; } /** * 写入javabean属性 */ public static StringBuilder writeAttr(Class cls) throws ClassNotFoundException { StringBuilder sb = new StringBuilder(); Method[] methods = cls.getMethods(); if (batch) { sb.append(" for (int i = 0; i < " + classNameXx + "List.size(); i++) {\n"); sb.append(" " + className + " " + classNameXx + " = " + classNameXx + "List.get(i);\n"); for (Method m : methods) { // String类型才行 if (m.getName().indexOf("get") != -1 && m.getReturnType() == String.class) { sb.append(" " + paramName + ".addBatchSqlParam(" + sqlIndex + ", " + forParam + ", " + classNameXx + "." + m.getName() + "());\n"); } } sb.append(" }\n"); } else { for (Method m : methods) { // String类型才行 if (m.getName().indexOf("get") != -1 && m.getReturnType() == String.class) { sb.append(" " + paramName + ".addFirstSqlParam(" + classNameXx + "." + m.getName() + "());\n"); } } } return sb; } }
相关推荐
例如,我们可以创建一个自定义的处理器,该处理器会在编译期间检查带有特定注解的类,并自动生成相应的DAO(数据访问对象)类,这些DAO类已经包含了基于注解信息生成的SQL方法。 总的来说,结合注解和反射,开发者...
1. **生成SQL语句**:根据方法名和参数生成相应的SQL语句。例如,`insert()` 方法可能对应`INSERT INTO`语句,`query()` 方法对应`SELECT`语句。可以使用`Method`对象的`getName()`方法获取方法名,然后通过一定的...
在本篇文章中,我们将深入探讨如何利用反射机制来简化DAO(数据访问对象)层的设计和实现。 首先,让我们理解什么是DAO层。DAO层是应用程序与数据库交互的一层抽象,它的主要职责是封装SQL查询,处理数据库操作,...
在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。在给定的“利用反射实现的增删改查操作的底层代码”中,我们可以深入理解如何通过反射机制简化JDBC(Java Database ...
4. **命令行界面或图形用户界面**:为了方便使用,工具可能提供了命令行参数或者简单的GUI,允许开发者输入domain类路径,选择数据库配置,然后自动生成相应的DAO代码。 5. **扩展性**:由于标题提到“功能有待又垒...
泛型DAO模式也常被用于开发工具库,比如一些自动化的代码生成工具,它们可以根据数据库表结构自动生成对应的泛型DAO和实体类,减轻开发人员的工作负担。此外,还有一些IDE插件也能帮助生成这些代码。 至于压缩包中...
`GenerateSqlFromExpression`方法会解析表达式树并生成对应的SQL语句。 然后,通用Dao层的接口可能如下所示: ```csharp public interface IGenericDao { IEnumerable<T> GetAll(); T GetById(object id); void...
在这个"封转dao层"的方法中,开发者只需要提供实体类的全限定类名(如"po.User"),系统就能动态生成对应的DAO实现。这通常依赖于反射和代码生成技术。反射是Java的一个强大特性,允许程序在运行时检查和修改对象的...
在这个场景下,ORM框架可能用于自动根据表结构生成Java实体类和DAO层代码。 3. JPA(Java Persistence API):Java标准的ORM规范,提供了一种统一的方式来管理持久化对象。 4. Spring Boot:一个流行的Java框架,...
1. 反射(Reflection):Java反射机制允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用其方法。通过`Class`类,我们可以实例化未知类型的对象,调用私有方法,访问私有字段,以及检查类的...
具体实现时,我们可以为每个数据库操作创建一个泛型方法,使用反射获取实体类的字段,根据字段生成对应的SQL语句片段。比如在插入操作中,我们可以遍历`T`的所有字段,构建一个`INSERT INTO table_name (field1, ...
它能够根据数据库表结构自动生成对应的实体类、映射文件以及可能的DAO层代码。这样,开发者无需手动编写这些繁琐的代码,从而更专注于业务逻辑的实现。 在实体类生成方面,`generate`工具会基于数据库中的表信息,...
利用反射,Comode可以根据实体类的信息动态生成对应的DAO类,这样就不需要为每一个实体类都手动编写一套数据库操作代码,降低了代码的复杂度。 在文件名"ComodeFrom"中,"From"可能是表示来源或基础的意思,暗示...
- 代码生成逻辑:基于获取的元数据,动态生成C#或Java实体类代码,每个表对应一个类。 - 可能还有配置文件,用于用户输入数据库连接信息和选择生成的目标语言。 这个DEMO的实现可能会涉及反射、字符串操作以及文件...
例如,如果你有一个包含多个实体类的数据模型,利用反射生成的代码会为你创建对应的DAO接口和实现,以及可能的Service层和Controller层,大大简化了开发流程。 总的来说,Java开发工具,特别是那些利用反射技术的...
6. **代码生成工具**:使用代码生成工具,如MyBatis的Generator,根据数据库元数据自动生成DAO和模型类,减少手动编写的工作量。 7. **Repository模式**:在面向领域的开发中,Repository模式提供了一种更面向对象...
这类工具通常会根据数据库结构自动生成对应的模型类、持久化接口及其实现、控制器类等。 描述中的"导入eclipse,执行数据库脚本就可以运行起来"提供了项目的运行步骤。这表明项目是基于Eclipse IDE构建的,因此需要...
例如,在生成DAO层、Service层或者Controller层的代码时,开发者只需要定义好模板,然后提供相应的实体类信息,模板引擎就会自动生成相应的Java代码。 2. **元编程(Metaprogramming)**: Java的反射API是实现元...
MySQL逆向生成工具是一种便捷的开发辅助软件,它能够帮助程序员快速地从现有的数据库结构生成对应的Java代码,如DAO(Data Access Object)层代码。这种工具极大地提高了开发效率,减少了手动编写这些重复性代码的...
但通过这个工具,我们可以自动生成对应于数据库表的DAO(数据访问对象)文件、接口(interface)、DAO配置文件(如dao.xml)以及POJO(Plain Old Java Object,在.NET中等同于Plain Old CLR Object)实体类文件。...