there is a very simple entity bean generator for mysql
johnhollon Mar 2, 2007 8:49 AM
package com.jdi.dbport.utils; import java.sql.*; import java.io.*; /** * Create Entity Bean (byte code) from existing tables in database. * This generator can only generate basic code for programming, so * you should optimize the generated code. * before you use this tool, be sure that there is a folder called * "001_JDI_Generate_EntityBean_TEMP" in the root of C hard driver. * @author CHR * */ public class GenerateEntityBeans { private static String packageName = "com.jdi.persistence"; private static String directory = "C:\\001_JDI_Generate_EntityBean_TEMP\\"; StringBuffer start = new StringBuffer() .append("/** Generated Entity Bean - YOU SHOULD OPTIMIZE IT - Copyright (C) ??? */\n"); StringBuffer packagingAndImporting = new StringBuffer() .append("package " + packageName + ";" + "\n" + "import javax.persistence.*; \n" + "import java.util.*; \n" + "import java.sql.*; \n" + "import java.math.*;\n\n"); private StringBuffer doGenerateClassName(String tablename,String classname){ String classdeclaring = "@Entity \n " + "@Table(name=\"" + tablename + "\") \n " + "public class " + classname +"{\n"; StringBuffer mainclasstext = new StringBuffer().append(start).append(packagingAndImporting); mainclasstext.append(classdeclaring); return mainclasstext; } private StringBuffer doGenerateProperties(String columnname, String datatype, String keytype, String nullable, String defaultvalue){ String useddatatype; String compareString = datatype.concat("111111111"); //Integer,Int,Mediumint,tinyint,smallint as int if(compareString.substring(0,7).equalsIgnoreCase("Integer")||compareString.substring(0,3).equalsIgnoreCase("Int")|| compareString.substring(0,9).equalsIgnoreCase("MEDIUMINT")||compareString.substring(0,8).equalsIgnoreCase("SMALLINT")|| compareString.substring(0,7).equalsIgnoreCase("TINYINT")) useddatatype = "int"; //bigint as long else if(compareString.substring(0,6).equalsIgnoreCase("BIGINT")) useddatatype = "long"; //float,double,decimal,real,numeric as double else if(compareString.substring(0,5).equalsIgnoreCase("FLOAT")||compareString.substring(0,6).equalsIgnoreCase("DOUBLE")|| compareString.substring(0,7).equalsIgnoreCase("DECIMAL")||compareString.substring(0,4).equalsIgnoreCase("REAL")|| compareString.substring(0,7).equalsIgnoreCase("NUMERIC")) useddatatype = "double"; //char, varchar, date, datetime, timestamp as String else if(compareString.substring(0,4).equalsIgnoreCase("CHAR")||compareString.substring(0,7).equalsIgnoreCase("VARCHAR")|| compareString.substring(0,4).equalsIgnoreCase("DATE") ||compareString.substring(0,8).equalsIgnoreCase("DATETIME") || compareString.substring(0,9).equalsIgnoreCase("TIMESTAMP")) useddatatype = "String"; else useddatatype = "String"; String propertiesclaring1 = "\tprivate " + useddatatype + " " + columnname + ";\n"; String propertiesclaring2 = "\t@Column(name=\""+ columnname +"\")\n"; String propertiesgetter = "\tpublic " + useddatatype + " get" + columnname + "(){\n\t\treturn " + columnname +";\n\t}\n"; String propertiessetter = "\tpublic void " + "set" + columnname + "(" + useddatatype + " " + columnname + "){\n\t\tthis." + columnname + " = " + columnname + ";\n\t}\n\n"; String propertiesID = "\t@Id\n\t@GeneratedValue\n"; StringBuffer propertiesText = new StringBuffer().append(propertiesclaring1); if(keytype!=null && keytype.equalsIgnoreCase("PRI")) propertiesText.append(propertiesID); propertiesText.append(propertiesclaring2).append(propertiesgetter).append(propertiessetter); return propertiesText; } private StringBuffer doGenerateJavaCode(Connection conn, String tablename,String classname){ StringBuffer javaCode = new StringBuffer(); javaCode.append(doGenerateClassName(tablename,classname)); String querycolumns = "show columns from " + tablename; try{ Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(querycolumns); while(rs.next()){ javaCode.append(doGenerateProperties(rs.getString("Field"),rs.getString("Type"), rs.getString("Key"),rs.getString("Null"),rs.getString("Default"))); } rs.close(); stmt.close(); javaCode.append("\n}"); }catch(Exception e){ System.out.println(e.getMessage()); } return javaCode; } private void writeToFile(StringBuffer sb, String filename){ try{ File out = new File(filename); FileWriter fw = new FileWriter(out); for (int i = 0; i < sb.length(); i++){ char c = sb.charAt(i); fw.write(c); } fw.flush(); fw.close(); }catch(Exception e){ System.out.println(e.getMessage()); } } public GenerateEntityBeans (Connection conn, String tablename, String classname, String directory){ writeToFile(doGenerateJavaCode(conn,tablename,classname),directory); } public static void main(String args[]){ try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdi","jdi","jdi"); String query1 = "show tables"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query1); while(rs.next()){ String tablename = rs.getString(1); String classname = tablename + "EntityBean"; new GenerateEntityBeans(conn,tablename,classname,directory + classname + ".java"); } stmt.close(); rs.close(); conn.close(); }catch(Exception e){ System.out.print(e.toString()); }finally{ ; } } }