参考了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数据库和Java反射技术,帮助开发者快速生成与数据库表结构相对应的实体类,便于在ORM框架中使用,提高了开发效率和代码的可维护性。
### MySQL数据库生成C#实体类工具 在软件开发过程中,特别是在使用关系型数据库进行数据持久化操作时,实体类的创建是一项重复性高且容易出错的工作。为了解决这一问题,提高开发效率,出现了一些自动生成实体类的...
8. **可配置性**:一个完善的工具类应该允许用户配置,比如选择生成实体类的命名策略、是否生成getter/setter方法、是否包含equals()和hashCode()等。 9. **异常处理**:在处理过程中,工具类应能捕获并处理可能...
本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 首先,我们需要理解Java实体类的基本概念。在Java世界中,实体类通常用于ORM(对象关系映射)框架,如Hibernate或...
MySQL数据库生成Java实体类是一种常见的开发任务,尤其是在基于Java的后端开发中,它能够极大地提高开发效率。这个小工具的目的是将MySQL数据库中的表结构转换为对应的Java类,这样开发者就不需要手动创建这些表示...
这个XML文件包含了工具所需的参数,如数据库连接信息(包括数据库URL、用户名和密码)、需要逆向生成的数据库表名以及生成实体类的相关设置。例如,你可以指定实体类的包名、类名前缀、是否生成getter和setter方法、...
`generator-mysql`是一个实用工具,它基于`generator-mybatis`项目,用于自动从MySQL数据库生成实体类,大大简化了开发过程,特别是在处理大量数据表时。这个工具的亮点在于它不仅生成实体类,还能够生成字段的注释...
接着,工具会扫描指定的数据库,获取表信息,并基于这些信息生成实体类。如果需要适配其他ORM框架,如Entity Framework,你需要修改或替换模板文件,确保生成的代码符合目标ORM的规范。例如,Entity Framework通常...
数据库表一键生成实体类工具是开发过程中非常实用的辅助软件,尤其在大型项目中,能够极大地提高开发效率。本工具支持多种数据库类型,包括MySQL和SQL等,可以自动生成JAVA和C#等编程语言的实体类。这不仅节省了手动...
本资源分享的是如何根据Java实体类自动创建MySQL数据库表,下面将详细介绍这一过程。 首先,我们需要一个ORM框架,例如Hibernate或MyBatis。这里以广泛使用的Hibernate为例。Hibernate是一个强大的Java持久化框架,...
根据数据库字段自动生成相应的实体类的可执行工具。只支持mysql
里面是CodeSmith根据数据库表生成实体类的例子, 数据库是mysql,生成的是java文件, codesmith的mysql链接字符串为: Database=test;Data Source=127.0.0.1;User Id=root;Password=root;port=3306
通过此工具,开发者可以快速将MySQL数据库中的表结构映射到C#代码中的实体类,使得数据操作更加便捷。 同时,该工具具有灵活性,允许用户通过修改模板文件来适应其他ORM框架,如Entity Framework。Entity Framework...
MySQL数据库生成实体类代码主要涉及的是C#编程语言与MySQL数据库的交互,以及代码自动生成技术。在软件开发中,实体类通常代表数据库中的表,它们提供了数据模型的面向对象表示,使得开发者能够更容易地操作数据库。...
本文将详细介绍一款名为“C#数据库实体类生成工具”的高效实用工具,该工具具有全面的功能,包括检索表名、批量生成实体类等,适用于SQL、Oracle、Access和MySQL等多种数据库。 首先,让我们理解实体类在数据库交互...
4. **编辑T4模板**: 修改模板文件中的数据库连接信息和需要生成实体类的表名。T4模板会根据这些信息动态生成实体类代码。 5. **运行T4模板**: 右键点击模板文件,选择“运行定制工具”或直接在代码中调用`...
2. **保持同步**:当数据库表结构发生变化时,如添加或删除字段,只需重新生成实体类,即可确保代码与数据库的一致性。 3. **简化编程**:有了实体类,可以方便地使用ORM框架,如Entity Framework,进行数据库操作,...
对于Java开发,Eclipse提供了强大的代码自动生成工具,包括从数据库生成实体类。 JDK1.7是Java Development Kit的一个版本,包含了Java运行环境和开发工具。虽然现在已经有更新的JDK版本,但JDK1.7仍然在许多项目中...
首先,标题中的“VS2017 + EF6 连接MYSQL数据库生成实体”指的是在VS2017开发环境中,使用EF6来与MySQL数据库进行交互,并自动生成表示数据库表的C#实体类。这是提高开发效率的一种有效方法,因为无需手动编写数据库...
1、在Java开发中,常常需要将数据库表列字段换成Java实体类字段。但是手动实现这个转换过程比较慢,且容易出错,影响开发效率。为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表...