`

利用反射生成对应的dao参数类

 
阅读更多
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;
    }
}

 

分享到:
评论

相关推荐

    注解反射生成SQL语句

    例如,我们可以创建一个自定义的处理器,该处理器会在编译期间检查带有特定注解的类,并自动生成相应的DAO(数据访问对象)类,这些DAO类已经包含了基于注解信息生成的SQL方法。 总的来说,结合注解和反射,开发者...

    自定义Dao,反射实现

    1. **生成SQL语句**:根据方法名和参数生成相应的SQL语句。例如,`insert()` 方法可能对应`INSERT INTO`语句,`query()` 方法对应`SELECT`语句。可以使用`Method`对象的`getName()`方法获取方法名,然后通过一定的...

    JAVA反射的实现(使DAO层变得更加简单)

    在本篇文章中,我们将深入探讨如何利用反射机制来简化DAO(数据访问对象)层的设计和实现。 首先,让我们理解什么是DAO层。DAO层是应用程序与数据库交互的一层抽象,它的主要职责是封装SQL查询,处理数据库操作,...

    利用反射实现的增删改查操作的底层代码

    在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。在给定的“利用反射实现的增删改查操作的底层代码”中,我们可以深入理解如何通过反射机制简化JDBC(Java Database ...

    java代码 根据domain自动生成DAO层 小tool(功能有待又垒加)

    4. **命令行界面或图形用户界面**:为了方便使用,工具可能提供了命令行参数或者简单的GUI,允许开发者输入domain类路径,选择数据库配置,然后自动生成相应的DAO代码。 5. **扩展性**:由于标题提到“功能有待又垒...

    泛型dao

    泛型DAO模式也常被用于开发工具库,比如一些自动化的代码生成工具,它们可以根据数据库表结构自动生成对应的泛型DAO和实体类,减轻开发人员的工作负担。此外,还有一些IDE插件也能帮助生成这些代码。 至于压缩包中...

    C#特性标签实现通用Dao层

    `GenerateSqlFromExpression`方法会解析表达式树并生成对应的SQL语句。 然后,通用Dao层的接口可能如下所示: ```csharp public interface IGenericDao { IEnumerable&lt;T&gt; GetAll(); T GetById(object id); void...

    java封转dao层(源码),只需传路径,版本一

    在这个"封转dao层"的方法中,开发者只需要提供实体类的全限定类名(如"po.User"),系统就能动态生成对应的DAO实现。这通常依赖于反射和代码生成技术。反射是Java的一个强大特性,允许程序在运行时检查和修改对象的...

    Java直接通过连接数据库生成对应的Resful格式的API

    在这个场景下,ORM框架可能用于自动根据表结构生成Java实体类和DAO层代码。 3. JPA(Java Persistence API):Java标准的ORM规范,提供了一种统一的方式来管理持久化对象。 4. Spring Boot:一个流行的Java框架,...

    利用java反射、注解及泛型模拟ORM实现

    1. 反射(Reflection):Java反射机制允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用其方法。通过`Class`类,我们可以实例化未知类型的对象,调用私有方法,访问私有字段,以及检查类的...

    Java反射泛型,实现数据库的动态增删改查等功能

    具体实现时,我们可以为每个数据库操作创建一个泛型方法,使用反射获取实体类的字段,根据字段生成对应的SQL语句片段。比如在插入操作中,我们可以遍历`T`的所有字段,构建一个`INSERT INTO table_name (field1, ...

    生成hibernate配置文件和xml的辅助类generate

    它能够根据数据库表结构自动生成对应的实体类、映射文件以及可能的DAO层代码。这样,开发者无需手动编写这些繁琐的代码,从而更专注于业务逻辑的实现。 在实体类生成方面,`generate`工具会基于数据库中的表信息,...

    Comode

    利用反射,Comode可以根据实体类的信息动态生成对应的DAO类,这样就不需要为每一个实体类都手动编写一套数据库操作代码,降低了代码的复杂度。 在文件名"ComodeFrom"中,"From"可能是表示来源或基础的意思,暗示...

    (带源码)根据MS SQLServer数据库信息生成C#或JAVA实体类DEMO

    - 代码生成逻辑:基于获取的元数据,动态生成C#或Java实体类代码,每个表对应一个类。 - 可能还有配置文件,用于用户输入数据库连接信息和选择生成的目标语言。 这个DEMO的实现可能会涉及反射、字符串操作以及文件...

    java开发工具,自动生成代码

    例如,如果你有一个包含多个实体类的数据模型,利用反射生成的代码会为你创建对应的DAO接口和实现,以及可能的Service层和Controller层,大大简化了开发流程。 总的来说,Java开发工具,特别是那些利用反射技术的...

    不要重复 DAO !

    6. **代码生成工具**:使用代码生成工具,如MyBatis的Generator,根据数据库元数据自动生成DAO和模型类,减少手动编写的工作量。 7. **Repository模式**:在面向领域的开发中,Repository模式提供了一种更面向对象...

    autoCode java 项目代码 自动生成

    这类工具通常会根据数据库结构自动生成对应的模型类、持久化接口及其实现、控制器类等。 描述中的"导入eclipse,执行数据库脚本就可以运行起来"提供了项目的运行步骤。这表明项目是基于Eclipse IDE构建的,因此需要...

    java代码自动生成.txt数据文件

    例如,在生成DAO层、Service层或者Controller层的代码时,开发者只需要定义好模板,然后提供相应的实体类信息,模板引擎就会自动生成相应的Java代码。 2. **元编程(Metaprogramming)**: Java的反射API是实现元...

    简单版mysql逆向生成工具

    MySQL逆向生成工具是一种便捷的开发辅助软件,它能够帮助程序员快速地从现有的数据库结构生成对应的Java代码,如DAO(Data Access Object)层代码。这种工具极大地提高了开发效率,减少了手动编写这些重复性代码的...

    Nhibernate 映射文件生成工具

    但通过这个工具,我们可以自动生成对应于数据库表的DAO(数据访问对象)文件、接口(interface)、DAO配置文件(如dao.xml)以及POJO(Plain Old Java Object,在.NET中等同于Plain Old CLR Object)实体类文件。...

Global site tag (gtag.js) - Google Analytics