`
357029540
  • 浏览: 732818 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

mysql数据库表生成实体类

    博客分类:
  • JAVA
阅读更多

  参考了http://www.oschina.net/code/snippet_857839_15477

mysql数据库表生成实体类代码如下,稍微改造了一下:

package com.chinamobile.pumpValve.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;

/**
 *  on 2016/5/27.
 */
public class GenTableToCode {
    private String packageOutPath = "com.xxx.pumpValve.entity";//指定实体生成所在包的路径
    private String authorName = "xxxxx";//作者名字
    private String tableName = "user";//表名
    private String[] colNames; // 列名数组
    private String[] colTypes; //列名类型数组
    private int[] colSizes; //列名大小数组
    private String changeTableNameStr = "";//驼峰转换后的类名
    private boolean f_util = false; // 是否需要导入包java.util.*
    private boolean f_sql = false; // 是否需要导入包java.sql.*
    private boolean f_decimal = false;//是否需要导入java.math.BigDecimal

    //数据库连接
    private static final String URL ="jdbc:mysql://localhost:3306/pump_valve";
    private static final String NAME = "root";
    private static final String PASS = "";
    private static final String DRIVER ="com.mysql.jdbc.Driver";

    /*
	 * 构造函数
	 */
    public GenTableToCode(){

    }

    public void genTableToCode(){
        //创建连接
        Connection con = null;
        //查要生成实体类的表
        String sql = "select * from " + tableName;
        PreparedStatement pStemt = null;
        try {
            Class.forName(DRIVER);
            con = DriverManager.getConnection(URL,NAME,PASS);
            pStemt = con.prepareStatement(sql);
            ResultSetMetaData rsmd = pStemt.getMetaData();
            int size = rsmd.getColumnCount();	//统计列
            colNames = new String[size-4];
            colTypes = new String[size-4];
            colSizes = new int[size-4];
            for (int i = 0; i < size; i++) {
                String columnName = rsmd.getColumnName(i+1);
                if(!"CREATED_BY".equals(columnName) && !"CREATION_DATE".equals(columnName)
                        && !"LAST_UPDATED_BY".equals(columnName) && !"LAST_UPDATE_DATE".equals(columnName)){
                    //将字符串转换为驼峰样式
                    String [] columnNameStr =columnName.toLowerCase().split("_");
                    columnName = "";
                    for(String column : columnNameStr){
                        if(columnName.length() == 0){
                            columnName += column;
                        }else {
                            columnName += initCap(column);
                        }
                    }
                    colNames[i] = columnName;
                    colTypes[i] = rsmd.getColumnTypeName(i + 1);

                    if(colTypes[i].equalsIgnoreCase("datetime")){
                        f_util = true;
                    }
                    if(colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")){
                        f_sql = true;
                    }
                    if(colTypes[i].equalsIgnoreCase("decimal")){
                        f_decimal = true;
                    }
                    colSizes[i] = rsmd.getColumnDisplaySize(i + 1);
                }
            }

            String content = parse(colNames,colTypes,colSizes);
            File directory = new File("");
            //System.out.println("绝对路径:"+directory.getAbsolutePath());
            //System.out.println("相对路径:"+directory.getCanonicalPath());
            String path=this.getClass().getResource("").getPath();

//            System.out.println(path);
//            System.out.println("src/?/"+path.substring(path.lastIndexOf("/com/", path.length())) );
//			  String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initCap(tablename) + ".java";
//            System.out.println( "\\src\\\\main\\java\\"+this.packageOutPath.replace(".", "\\")+"\\"+initCap(tableName) + ".java");
            String outputPath = directory.getAbsolutePath()+ "\\src\\\\main\\java\\"+this.packageOutPath.replace(".", "\\")+"\\"+changeTableNameStr  + ".java";
//            System.out.println(directory.getAbsolutePath());
            File file = new File(outputPath);
            if(!file.exists()){
                file = new File(directory.getAbsolutePath()+ "\\src\\\\main\\java\\"+this.packageOutPath.replace(".", "\\"),changeTableNameStr  + ".java");
                file.createNewFile();
            }
            FileWriter fw = new FileWriter(outputPath);
            PrintWriter pw = new PrintWriter(fw);
            pw.println(content);
            pw.flush();
            pw.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }finally{
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 传参的方式生成表对应的实体类
     * @param tableName
     */
    public void genTableToCode(String tableName){
        this.tableName = tableName;
        genTableToCode();
    }

    /**
     * 功能:生成实体类主体代码
     * @param colNames
     * @param colTypes
     * @param colSizes
     * @return
     */
    private String parse(String[] colNames, String[] colTypes, int[] colSizes) {
        StringBuffer sb = new StringBuffer();
        //将表名字符串转换为驼峰样式
        String [] tableNameStr =tableName.toLowerCase().split("_");
        changeTableNameStr = "";
        for(String table : tableNameStr){
           changeTableNameStr += initCap(table);
        }        
        sb.append("package " + this.packageOutPath + ";\r\n");
        sb.append("\r\n");

        //判断是否导入工具包
        if(f_util){
            sb.append("import java.util.Date;\r\n");
        }
        if(f_sql){
            sb.append("import java.sql.*;\r\n");
        }
        if(f_decimal){
            sb.append("import java.math.BigDecimal;\r\n");
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        sb.append("\r\n");
        //注释部分
        sb.append("/**\r\n");
        sb.append("* Created by "+this.authorName+" on "+df.format(new java.util.Date())+"\r\n");
        sb.append("*@Description "+tableName+" 实体类\r\n");
        sb.append("*/ \r\n");

        //实体部分
        sb.append("\r\n\r\npublic class " + initCap(tableName)+ " extends BaseInfo" + "{\r\n");
        processAllAttrs(sb);//属性
        processAllMethod(sb);//get set方法
        sb.append("}\r\n");

        //System.out.println(sb.toString());
        return sb.toString();
    }

    /**
     * 功能:生成所有属性
     * @param sb
     */
    private void processAllAttrs(StringBuffer sb) {
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colNames[i] + ";\r\n");
        }

    }

    /**
     * 功能:生成所有方法
     * @param sb
     */
    private void processAllMethod(StringBuffer sb) {
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\tpublic void set" + initCap(colNames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " +
                    colNames[i] + "){\r\n");
            sb.append("\tthis." + colNames[i] + "=" + colNames[i] + ";\r\n");
            sb.append("\t}\r\n");
            sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initCap(colNames[i]) + "(){\r\n");
            sb.append("\t\treturn " + colNames[i] + ";\r\n");
            sb.append("\t}\r\n");
        }

    }

    /**
     * 功能:将输入字符串的首字母改成大写
     * @param str
     * @return
     */
    private String initCap(String str) {
        char[] ch = str.toCharArray();
        if(ch[0] >= 'a' && ch[0] <= 'z'){
            ch[0] = (char)(ch[0] - 32);
        }
        return new String(ch);
    }

    /**
     * 功能:获得列的数据类型
     * @param sqlType
     * @return
     */
    private String sqlType2JavaType(String sqlType) {
        if(sqlType.equalsIgnoreCase("bit")){
            return "boolean";
        }else if(sqlType.equalsIgnoreCase("tinyint")){
            return "byte";
        }else if(sqlType.equalsIgnoreCase("smallint")){
            return "short";
        }else if(sqlType.equalsIgnoreCase("int")){
            return "Integer";
        }else if(sqlType.equalsIgnoreCase("bigint")){
            return "long";
        }else if(sqlType.equalsIgnoreCase("float")){
            return "float";
        }else if(sqlType.equalsIgnoreCase("numeric")
                || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")
                || sqlType.equalsIgnoreCase("smallmoney")){
            return "double";
        }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")
                || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")
                || sqlType.equalsIgnoreCase("text") || sqlType.equalsIgnoreCase("json")){
            return "String";
        }else if(sqlType.equalsIgnoreCase("datetime")){
            return "Date";
        }else if(sqlType.equalsIgnoreCase("image")){
            return "Blod";
        }else if(sqlType.equalsIgnoreCase("decimal")){
            return "BigDecimal";
        }

        return null;
    }


    public static void main(String[] args) {
        GenTableToCode genTableToCode =  new GenTableToCode();
        List<String> tableNames = new ArrayList<String>();
        tableNames.add("user");
        tableNames.add("menu");
        for(String tableName : tableNames){
            genTableToCode.genTableToCode(tableName);
        }
    }

}

 

  如果是其他数据库,可以修改为相应的数据库连接

分享到:
评论

相关推荐

    mysql自动生成实体类

    总结起来,"mysql自动生成实体类"是一种实用的开发辅助工具,它结合了MySQL数据库和Java反射技术,帮助开发者快速生成与数据库表结构相对应的实体类,便于在ORM框架中使用,提高了开发效率和代码的可维护性。

    MySQL数据库生成C#实体类工具

    ### MySQL数据库生成C#实体类工具 在软件开发过程中,特别是在使用关系型数据库进行数据持久化操作时,实体类的创建是一项重复性高且容易出错的工作。为了解决这一问题,提高开发效率,出现了一些自动生成实体类的...

    mysql数据库表映射实体生成

    8. **可配置性**:一个完善的工具类应该允许用户配置,比如选择生成实体类的命名策略、是否生成getter/setter方法、是否包含equals()和hashCode()等。 9. **异常处理**:在处理过程中,工具类应能捕获并处理可能...

    MySQL表自动生成Java实体类

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

    mysql数据库生成java实体类

    MySQL数据库生成Java实体类是一种常见的开发任务,尤其是在基于Java的后端开发中,它能够极大地提高开发效率。这个小工具的目的是将MySQL数据库中的表结构转换为对应的Java类,这样开发者就不需要手动创建这些表示...

    逆向生成工具,有数据库表生成java bean实体类

    这个XML文件包含了工具所需的参数,如数据库连接信息(包括数据库URL、用户名和密码)、需要逆向生成的数据库表名以及生成实体类的相关设置。例如,你可以指定实体类的包名、类名前缀、是否生成getter和setter方法、...

    generator-mysql根据mysql数据库生成实体类并“生成注释”

    `generator-mysql`是一个实用工具,它基于`generator-mybatis`项目,用于自动从MySQL数据库生成实体类,大大简化了开发过程,特别是在处理大量数据表时。这个工具的亮点在于它不仅生成实体类,还能够生成字段的注释...

    数据库实体生成工具(MySql版)

    接着,工具会扫描指定的数据库,获取表信息,并基于这些信息生成实体类。如果需要适配其他ORM框架,如Entity Framework,你需要修改或替换模板文件,确保生成的代码符合目标ORM的规范。例如,Entity Framework通常...

    数据库表一键生成实体类豪华版工具.rar

    数据库表一键生成实体类工具是开发过程中非常实用的辅助软件,尤其在大型项目中,能够极大地提高开发效率。本工具支持多种数据库类型,包括MySQL和SQL等,可以自动生成JAVA和C#等编程语言的实体类。这不仅节省了手动...

    Java根据实体创建Mysql数据库表

    本资源分享的是如何根据Java实体类自动创建MySQL数据库表,下面将详细介绍这一过程。 首先,我们需要一个ORM框架,例如Hibernate或MyBatis。这里以广泛使用的Hibernate为例。Hibernate是一个强大的Java持久化框架,...

    CodeSmith根据数据库表生成实体类的例子

    里面是CodeSmith根据数据库表生成实体类的例子, 数据库是mysql,生成的是java文件, codesmith的mysql链接字符串为: Database=test;Data Source=127.0.0.1;User Id=root;Password=root;port=3306

    Mysql数据库实体生成工具

    通过此工具,开发者可以快速将MySQL数据库中的表结构映射到C#代码中的实体类,使得数据操作更加便捷。 同时,该工具具有灵活性,允许用户通过修改模板文件来适应其他ORM框架,如Entity Framework。Entity Framework...

    C#数据库实体类生成工具,只支持mysql

    根据数据库字段自动生成相应的实体类的可执行工具。只支持mysql

    mysql 数据库生成实体类代码

    MySQL数据库生成实体类代码主要涉及的是C#编程语言与MySQL数据库的交互,以及代码自动生成技术。在软件开发中,实体类通常代表数据库中的表,它们提供了数据模型的面向对象表示,使得开发者能够更容易地操作数据库。...

    SqlSugar生成实体类Demo

    4. **编辑T4模板**: 修改模板文件中的数据库连接信息和需要生成实体类的表名。T4模板会根据这些信息动态生成实体类代码。 5. **运行T4模板**: 右键点击模板文件,选择“运行定制工具”或直接在代码中调用`...

    实体类模型构建(根据数据库自动生成实体类)

    对于Java开发,Eclipse提供了强大的代码自动生成工具,包括从数据库生成实体类。 JDK1.7是Java Development Kit的一个版本,包含了Java运行环境和开发工具。虽然现在已经有更新的JDK版本,但JDK1.7仍然在许多项目中...

    VS2017 +EF6 连接MYSQL数据库生成实体

    首先,标题中的“VS2017 + EF6 连接MYSQL数据库生成实体”指的是在VS2017开发环境中,使用EF6来与MySQL数据库进行交互,并自动生成表示数据库表的C#实体类。这是提高开发效率的一种有效方法,因为无需手动编写数据库...

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    1、在Java开发中,常常需要将数据库表列字段换成Java实体类字段。但是手动实现这个转换过程比较慢,且容易出错,影响开发效率。为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表...

    根据数据库自动生成实体类

    1.打开控制台,net start mysql 2.java Table2Class 数据库名 表名 操作方式 3.java:代表生成实体类,生成到桌面上 insert:插入 update:修改

    CodeSmith根据数据库表生成实体类

    里面是CodeSmith根据数据表生成实体类的例子 用的是mysql数据库 链接字符串为: Database=test;Data Source=127.0.0.1;User Id=root;Password=root;port=3306

Global site tag (gtag.js) - Google Analytics