在工作中有时候需要用到建立实体类,从数据库中读取各个表格自动的生成实体类,如果表的数量比较大的时候,这个繁琐的工作量还是比较大的,这时候可以用一个小程序自动的生成实体类。其实,就是文件的读写操作而已。
数据库这里用的是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); } } }
相关推荐
本主题将深入探讨如何根据Java实体类自动生成Hibernate的映射文件,这对于不使用MyEclipse等集成开发环境的开发者来说尤其实用。 首先,我们需要了解Hibernate映射文件的基本结构。通常,一个映射文件以`.hbm.xml`...
本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 首先,我们需要理解Java实体类的基本概念。在Java世界中,实体类通常用于ORM(对象关系映射)框架,如Hibernate或...
为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发...
Java实体类生成工具的工作原理通常是读取数据库的表结构信息,如表名、字段名、字段类型等,然后根据预设的模板自动生成相应的Java源代码。这样,开发者只需要关注业务逻辑,无需在基础架构代码上浪费时间。 在使用...
为了从Java实体类自动生成MySQL建表语句,开发者可以使用一些工具或库,如`JPA`的`Metamodel`API,或者开源项目如`MyBatis Generator`。这些工具能够解析Java源代码,从中提取实体类信息并生成相应的SQL语句。 4. ...
本项目提供的"JAVA SQLite 自动生成实体类 源码"是一个实用工具,它能够帮助开发者自动生成与SQLite数据库表结构对应的Java实体类,从而简化数据操作的代码编写工作。 首先,我们来理解这个工具的工作原理。当...
标题中的"mybatis自动生成Java实体类和映射文件的自动生成类工具"指的就是这样的一个辅助开发工具,它可以分析数据库表结构,并根据表信息自动生成对应的Java实体类和Mapper接口及其XML配置文件。 在Java开发中,...
这个压缩包文件提供了一个解决方案,允许开发者自动生成基于数据库表结构的Java实体类。 首先,我们需要理解`generator.xml`这个配置文件的作用。它是MyBatis Generator(MBG)的一个配置文件,MBG是一个强大的工具...
MySQL数据库生成Java实体类是一种常见的开发任务,尤其是在基于Java的后端开发中,它能够极大地提高开发效率。这个小工具的目的是将MySQL数据库中的表结构转换为对应的Java类,这样开发者就不需要手动创建这些表示...
在.NET开发环境中,自动生成实体类是一项常见的任务,特别是在基于ORM(对象关系映射)的框架下,如Entity Framework或NHibernate。实体类是数据库表在编程语言中的映射,它们帮助开发者通过对象来操作数据库,减少...
java ~ mybatis-plus 自动生成实体类 jar
JDBC读取数据库元数据,生成JAVA实体类
在这个场景中,"JAVA通过实体生成数据库表"指的是使用特定的工具或框架,根据预先定义好的Java实体类,自动生成对应的数据库表结构。 首先,我们需要理解什么是实体类。在Java中,实体类通常是对应数据库中的一张表...
Java实体类代码生成器是一种工具,它能够自动化创建Java编程中的数据访问对象(DAO)或实体类,大大节省了开发人员编写重复性代码的时间。实体类通常用于表示数据库中的表或者服务接口的数据结构,它们是ORM(对象...
因此,实体类自动生成工具应运而生,以提高开发效率,减少重复劳动。 这个名为"个人EntityTool"的压缩包文件,根据其标题和描述,很可能是作者自己编写的一个用于自动生成实体类的工具。这样的工具通常会根据数据库...
"mysql自动生成实体类"就是这样一个工具,它能够帮助开发者快速地根据MySQL中的表结构生成对应的Java实体类,极大地减少了手动编写代码的工作量。 生成实体类的主要目的是实现对象关系映射(Object-Relational ...
JDBC读取数据库元数据,生成JAVA实体类