在工作中有时候需要用到建立实体类,从数据库中读取各个表格自动的生成实体类,如果表的数量比较大的时候,这个繁琐的工作量还是比较大的,这时候可以用一个小程序自动的生成实体类。其实,就是文件的读写操作而已。
数据库这里用的是mysql5.1,所以需要导入maysql的jar包。
config.properties
url=jdbc:mysql://localhost:3306/ibatis driver=com.mysql.jdbc.Driver username=root password=root
DBUtils.java
package utils; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class DBUtils { private static Properties prop = new Properties(); static{ ClassLoader loader = DBUtils.class.getClassLoader(); InputStream in = loader.getResourceAsStream("utils/config.properties"); try { prop.load(in); Class.forName(prop.getProperty("driver")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() throws Exception{ return DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("username"),prop.getProperty("password")); } public static void close(Connection conn){ if(conn != null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) throws Exception{ System.out.println(getConnection()); } }
GenEntityTool.java
package biz; import java.io.FileWriter; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import utils.DBUtils; public class GenEntityTool { private String[] colNames;//列名数组 private String[] colType;//列名类型数组 private int[] colSize;//列名大小数组 private boolean f_util = false;//是否需要导入java.util.* private boolean f_sql = false;//是否需要导入java.sql.* public GenEntityTool(){} public GenEntityTool(String tabName){ Connection conn = null; String sql = "select * from " + tabName; try { conn = DBUtils.getConnection(); PreparedStatement prep = conn.prepareStatement(sql); ResultSetMetaData rsmd = prep.getMetaData(); int size = rsmd.getColumnCount();//共有多少列 colNames = new String[size]; colType = new String[size]; colSize = new int[size]; for(int i=0;i<rsmd.getColumnCount();i++){ colNames[i] = rsmd.getColumnName(i+1); colType[i] = rsmd.getColumnTypeName(i+1); if(colType[i].equalsIgnoreCase("date")){ f_util = true; } if(colType[i].equalsIgnoreCase("text") || colType[i].equalsIgnoreCase("image")){ f_sql = true; } colSize[i] = rsmd.getColumnDisplaySize(i+1); } String content = parse(tabName, colNames, colType, colSize); FileWriter fw = new FileWriter("E:\\entity\\"+initCap(tabName)+".java"); PrintWriter pw = new PrintWriter(fw); pw.println(content); pw.flush(); pw.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtils.close(conn); } } /* * 解析处理,生成java实体类主体代码 */ private String parse(String tabName,String[] colNames,String[] colType,int[] colSize){ StringBuffer sb = new StringBuffer(); if(f_util){ sb.append("import java.util.Date;\r\n"); } if(f_sql){ sb.append("import java.sql.*;\r\n\r\n\r\n"); } sb.append("public class "+initCap(tabName)+"{\r\n"); processAllAttrs(sb); processAllMethod(sb); sb.append("}\r\n"); return sb.toString(); } /* * 生成所有的方法 */ private void processAllMethod(StringBuffer sb){ for(int i=0;i<colNames.length;i++){ sb.append("\tpublic void set"+initCap(colNames[i])+"("+sqlType2JavaType(colType[i])+" "+colNames[i]+"){\r\n"); sb.append("\t\tthis."+colNames[i]+" = "+colNames[i]+";\r\n"); sb.append("\t}\r\n"); sb.append("\tpublic "+sqlType2JavaType(colType[i])+" get"+initCap(colNames[i])+"(){\r\n"); sb.append("\t\treturn "+colNames[i]+";\r\n"); sb.append("\t}\r\n"); } } /* * 解析输出属性 * * @return */ private void processAllAttrs(StringBuffer sb){ for(int i=0;i<colNames.length;i++){ sb.append("\tprivate "+sqlType2JavaType(colType[i])+" "+colNames[i]+";\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); } 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 "int"; } else if (sqlType.equalsIgnoreCase("bigint")) { return "long"; } else if (sqlType.equalsIgnoreCase("float")) { return "float"; } else if (sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric") || sqlType.equalsIgnoreCase("double") || sqlType.equalsIgnoreCase("real")) { return "double"; } else if (sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")) { return "double"; } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")) { return "String"; } else if (sqlType.equalsIgnoreCase("datetime") || sqlType.equalsIgnoreCase("date")) { return "Date"; } else if (sqlType.equalsIgnoreCase("image")) { return "Blob"; } else if (sqlType.equalsIgnoreCase("text")) { return "Clob"; } return null; } /* * 读取数据库中的表名 * @return表名的String数组 * */ private static String[] getTabNames(){ Connection conn = null; String sql = "show tables"; String[] tabNames = null; try { conn = DBUtils.getConnection(); PreparedStatement prep = conn.prepareStatement(sql); ResultSet rs = prep.executeQuery(); rs.last(); int size = rs.getRow(); tabNames = new String[size]; rs.beforeFirst(); int i=0; while(rs.next() && i < size){ tabNames[i]=rs.getString(1); i++; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtils.close(conn); } return tabNames; } public static void main(String[] args){ String[] tabNames = getTabNames(); for(int i=0;i<tabNames.length;i++){ new GenEntityTool(tabNames[i]); } } }
主题代码已经贴上去了,下面来进行一次啊测试...
Test.java
package biz; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import utils.DBUtils; public class Test { public static void main(String[] args){ String sql = "show tables"; Connection conn = null; try { conn = DBUtils.getConnection(); PreparedStatement prep = conn.prepareStatement(sql); ResultSet rs = prep.executeQuery(); while(rs.next()){ System.out.println(rs.getString(1)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtils.close(conn); } } }
相关推荐
根据实体类生成简单的Hibernate映射文件,对不用Myeclipse的童鞋还是有用
为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发...
配置好数据库连接字符串和输出路径,自动把MySQL数据表生成相应的Java实体类。附上数据库。来源是参考别人的代码,有添加了自动获取表名的功能,不需要手动写表名,非常方便。
JDBC读取数据库元数据,生成JAVA实体类
解压配置好generator.xml后,打开cmd,使用(说明.txt)中的命令。。就可以生成实体类了,哇哈哈哈。这样就可以根据数据库表自动生成java实体类~~
自动生成所有sql数据库用户表的所有实体类.... .net代码
实现功能: 1.根据SQLite数据库文件,生成java实体类 可用于使用了SQLite数据的 android 或 Java项目.
mybatis实体类以及mapper映射xml文件及接口的自动生成类工具
java 实体类 代码生成器 带注释
由JAVA的实体类反生成数据库表。
java实体类生成工具
JDBC读取数据库元数据,生成JAVA实体类
可以直接从数据库查取数据并生成字段,现只支持mysql,傻瓜式操作,大大加快了实体类的编写速度,非常有用切非常耐用。
mybatis自动导入实体类和xml工具包 自动生成实体类和xml 配置的过程在我的博文里有
自己编写的实体类生成器 ...可生成的实体类:C#实体类和Java实体类 软件特点: 同时支持Oracle和SQLServer两种数据库 同时支持Java和C#程序的实体类生成 同时支持任意数据库搭配任意程序的实体类生成
Java自动生成数据库里面说有表的实体类,减轻了程序员的负担,并且不易出错
用一个根据数据库表自动生成实体类代码的案例讲解了代码生成器的核心思路,相关博客地址:https://blog.csdn.net/qq_31142553/article/details/93673384。
根据DDL获取基本的JAVA 实体类 复制DDL create table开始部分,点击获取即可
JavaMysql实体类自动生成 省去了每次都要写实体类的麻烦