`
xiang37
  • 浏览: 429529 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用JDBC生成数据库表对应的Class

 
阅读更多

简单的实现了Hibernate工具自动生成Class文件的功能。

 

 

package com.xiva.demo.util;

import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;

import org.apache.commons.io.FileUtils;

/**
 * 
 * <功能简述> <详细描述>
 * 
 * @author XIVA
 * @version [1.0, 2013-5-1]
 * @see [相关类/方法]
 * @since [产品、模块版本]
 */
public class GenarateDomainClass
{

    private static Connection conn;

    private static StringBuffer classString;

    private static String lineSep = System.getProperty("line.separator");

    private static String fileName;

    static
    {
        try
        {
            Class.forName("org.gjt.mm.mysql.Driver");
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
    }

    private static void ininConn() throws SQLException
    {
        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/blogsysdb?useUnicode=true&amp;characterEncoding=utf-8", "blogdb",
                "blogdb");
    }

    private static String getDataType(int type, int scale)
    {
        String dataType = "";

        switch (type)
        {
            case Types.LONGVARCHAR: // -1
                dataType = "Long";
                break;
            case Types.CHAR: // 1
                dataType = "Character";
                break;
            case Types.NUMERIC: // 2
                switch (scale)
                {
                    case 0:
                        dataType = "Number";
                        break;
                    case -127:
                        dataType = "Float";
                        break;
                    default:
                        dataType = "Number";
                }
                break;
            case Types.VARCHAR: // 12
                dataType = "String";
                break;
            case Types.DATE: // 91
                dataType = "Date";
                break;
            case Types.TIMESTAMP: // 93
                dataType = "Date";
                break;
            case Types.BLOB:
                dataType = "Blob";
                break;
            default:
                dataType = "String";
        }
        return dataType;
    }

    private static void queryTable(String tableName) throws SQLException
    {

        PreparedStatement preStat = conn.prepareStatement("select * from " + tableName);
        ResultSet result = preStat.executeQuery();
        ResultSetMetaData resultMeta = result.getMetaData();
        int colCount = resultMeta.getColumnCount();
        String clazzName = convertName(tableName, true);
        classString.append("public class " + clazzName + " extends BaseEntity {").append(lineSep);
        fileName = clazzName;
        for (int i = 1; i <= colCount; i++)
        {
            String dbColName = resultMeta.getColumnName(i);
            String colType = getDataType(resultMeta.getColumnType(i), resultMeta.getScale(i));
            String colName = convertName(dbColName, false);
            if (!dbColName.equals(colName))
            {
                classString.append("@Column(name = \"" + dbColName + "\")").append(lineSep);
            }
            classString.append("private " + colType + " " + colName + ";").append(lineSep);
        }
        classString.append("}");
    }

    private static String convertName(String dbname, boolean isTable)
    {
        StringBuffer className = new StringBuffer(32);

        String dbNameLow = dbname.toLowerCase();
        String[] names = dbNameLow.split("_");
        int len = names.length;
        if (len > 1)
        {
            for (int i = 0; i < len; i++)
            {
                String name = names[i];
                if (i == 0 && !isTable)
                {
                    className.append(name);
                    continue;
                }
                className.append(name.substring(0, 1).toUpperCase());
                className.append(name.substring(1));
            }
        }
        else
        {
            className.append(dbNameLow);
        }

        return className.toString();
    }

    public static void ininData(String tableName)
    {
        classString = new StringBuffer(1024);
        classString.append("package com.xiva.domain;").append(lineSep);
        classString.append(lineSep);
        classString.append("@Entity").append(lineSep);
        classString.append("@Table(name = \"" + tableName + "\")").append(lineSep);
    }

    public static void createFile(String path)
    {
        String filePath = path + File.separator + fileName + ".java";
        File file = new File(filePath);
        try
        {
            System.out.println(filePath);
            boolean isCreate = file.createNewFile();
            System.out.println(isCreate);
            FileUtils.write(file, classString, "utf-8");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 
     * @param args
     */
    public static void main(String[] args) throws SQLException
    {
        String tableName = "iv_resource";
        String path = "F:\\WorkSpace\\GitProjects\\xivamsys\\src\\com\\xiva\\domain";
        ininConn();
        ininData(tableName);
        queryTable(tableName);
        createFile(path);
        System.out.println(classString);
    }

}


 

 

生成结果如下所示:

 

package com.xiva.domain;

@Entity
@Table(name = "iv_function")
public class IvFunction extends BaseEntity {
@Column(name = "func_id")
private String funcId;
@Column(name = "func_name")
private String funcName;
@Column(name = "func_desc")
private String funcDesc;
}

 get set 的生成可以通过ctrl + shift + s快捷生成。导入的类,可以通过Ctrl + shift + o,格式化可以通过Ctrl + shift + f;文件路径可以指定。

 

分享到:
评论

相关推荐

    SpringBoot + MybatisPlus 实现实体类转成数据库表结构,可直接运行

    总结,通过SpringBoot和MybatisPlus的结合,我们可以方便地从Java实体类生成数据库表结构,无需手动编写SQL脚本。这种方式对于快速构建原型或者在数据丢失后恢复表结构非常有用。在实际应用中,记得对重要数据进行...

    hibernate反向生成数据库表.doc

    《使用Hibernate反向生成数据库表》 在Java后端开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作。利用Hibernate,开发者可以将Java类与数据库表进行映射,使得数据库操作更加面向对象。...

    spring roo 生成数据库表

    在这个场景中,"spring roo 生成数据库表"指的是使用Spring Roo工具来自动化创建与数据库表对应的Java实体类和数据访问层。 首先,Spring Roo支持多种数据库,包括MySQL、Oracle、PostgreSQL等。在开始之前,你需要...

    JDBC与Java数据库编程.pdf

    2. **加载JDBC驱动程序**:通过Class.forName()方法加载对应的数据库驱动程序。 3. **建立数据库连接**:使用DriverManager.getConnection()方法建立与数据库的连接。 4. **执行SQL语句**:创建Statement或...

    SpringBoot基于MYSQL动态生成数据库

    当应用启动时,Hibernate会根据这些实体类自动创建对应的表,实现了动态生成数据库。 除了实体类,我们还需要创建一个继承自`JpaRepository`的接口,用于与数据库进行交互: ```java import org.springframework....

    jdbc链接数据库+通过java操作表格的jxl的jar包

    这个例子中,我们首先使用JDBC连接到MySQL数据库,执行一个查询,然后将查询结果写入一个新的Excel工作表。每个数据库记录对应Excel的一行,每列的数据对应一个单元格。注意,这只是一个基本示例,实际应用中需要...

    根据hibernate.cfg.xml文件生成POJO数据库表的工具类

    2. **获取表名和字段信息**:从每个`&lt;class&gt;`标签中提取出表名,并通过JDBC连接查询数据库获取表的字段信息,包括字段名、类型等。 3. **生成模板代码**:根据获取到的表结构,创建POJO类模板。通常,每个字段会...

    oracle 根据数据库自动生成JAVA代码

    总结来说,"Oracle根据数据库自动生成JAVA代码"是一个集成开发环境(IDE)或代码生成工具的功能,它利用元数据信息自动生成Java项目的基本架构,包括实体类、DAO、Service、Controller以及前端HTML模板。这种自动化...

    使用eclipse自动生成数据库对应的实体类(带中文注释)

    本教程将指导你如何使用Eclipse结合MyBatis Generator自动生成带有中文注释的数据库对应实体类。 首先,你需要了解MyBatis Generator(MBG)是一个自动化工具,它可以从数据库中生成Java源代码,包括实体类、Mapper...

    数据库配置生成页面

    标签中的“配置生成页面”可能指的是自动生成数据库查询页面的能力。这可以通过解析数据库表结构,自动生成对应的表单字段和查询逻辑。Spring Data的动态查询功能可以帮助实现这一目标,例如,使用`@Query`注解编写...

    JSP通过JDBC驱动各种数据库方法

    1. **加载驱动**:在JSP中,使用`Class.forName()`方法加载对应的数据库驱动。例如,对于MySQL,代码可能是`Class.forName("com.mysql.jdbc.Driver")`。 2. **创建连接**:使用`DriverManager.getConnection()`方法...

    MyEclipse 2014 使用hibernate3 生成数据库实体类 和 xml映射文件

    本文将深入探讨如何在MyEclipse 2014环境中利用Hibernate 3这一强大的ORM(对象关系映射)框架,生成数据库实体类和XML映射文件。这将帮助开发者有效地将Java对象与数据库表进行绑定,实现数据的透明操作。 首先,...

    mybatis 逆向工程,根据数据库表生成mapper

    总结来说,MyBatis逆向工程是一个强大的自动化工具,通过配置"generatorConfig.xml"和运行GeneratorSqlmap,我们可以快速地生成与数据库表对应的Mapper接口、实体类和XML映射文件,大大简化了开发流程,提高了开发...

    动态加载jdbc jar包连接数据库生成数据文件

    总结来说,动态加载JDBC Jar包连接数据库并生成压力测试数据文件是一种高效且灵活的方法,它可以帮助我们创建更加真实的压力测试场景,确保应用在高负载下的稳定性和性能。同时,这种方法也有助于提高代码的可维护性...

    MySQL表自动生成Java实体类

    本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 首先,我们需要理解Java实体类的基本概念。在Java世界中,实体类通常用于ORM(对象关系映射)框架,如Hibernate或...

    JDBC数据库访问技术2022优秀文档.ppt

    在实际应用中,开发者还可以利用JDBC将数据库数据导出为Excel报表,方便数据分析和报告生成。这通常涉及读取数据库数据,转换为适当的格式,然后写入Excel文件。 总的来说,JDBC是Java开发人员与数据库交互的核心...

    pgsql中使用mybatis生成实体类

    在MyBatis中,实体类(Entity Class)是对应数据库表的一对一映射,用于存储和操作数据。 要使用MyBatis在pgsql中自动生成实体类,你需要以下步骤: 1. **安装和配置MyBatis Generator(MBG)**:MBG是MyBatis的一...

    Hibernate连接MySql数据库生成表结构

    总结,通过以上步骤,我们可以利用Hibernate连接到MySQL数据库并根据定义的Java实体类自动生成表结构。这种方式方便了数据库设计和开发流程,尤其是在快速迭代的项目中。在实际开发中,还可以结合其他工具,如IDEA的...

    利用POI解析excel并存入数据库demo

    在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...

    mybatis-generator生成数据库中文注释

    它可以根据数据库中的表结构自动生成对应的Java实体类、Mapper接口及XML配置文件,包括字段的getter和setter方法、CRUD操作等,极大地减少了手动编写这些基础代码的工作量。 在数据库中文注释的场景下,MBG的强大之...

Global site tag (gtag.js) - Google Analytics