`
影非弦
  • 浏览: 52005 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java实体类的自动生成

    博客分类:
  • java
阅读更多

在工作中有时候需要用到建立实体类,从数据库中读取各个表格自动的生成实体类,如果表的数量比较大的时候,这个繁琐的工作量还是比较大的,这时候可以用一个小程序自动的生成实体类。其实,就是文件的读写操作而已。

数据库这里用的是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映射文件

    本主题将深入探讨如何根据Java实体类自动生成Hibernate的映射文件,这对于不使用MyEclipse等集成开发环境的开发者来说尤其实用。 首先,我们需要了解Hibernate映射文件的基本结构。通常,一个映射文件以`.hbm.xml`...

    MySQL表自动生成Java实体类

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

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

    为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发...

    java实体类生成工具

    Java实体类生成工具的工作原理通常是读取数据库的表结构信息,如表名、字段名、字段类型等,然后根据预设的模板自动生成相应的Java源代码。这样,开发者只需要关注业务逻辑,无需在基础架构代码上浪费时间。 在使用...

    java实体转mysql建表语句

    为了从Java实体类自动生成MySQL建表语句,开发者可以使用一些工具或库,如`JPA`的`Metamodel`API,或者开源项目如`MyBatis Generator`。这些工具能够解析Java源代码,从中提取实体类信息并生成相应的SQL语句。 4. ...

    JAVA SQLite 自动生成实体类 源码

    本项目提供的"JAVA SQLite 自动生成实体类 源码"是一个实用工具,它能够帮助开发者自动生成与SQLite数据库表结构对应的Java实体类,从而简化数据操作的代码编写工作。 首先,我们来理解这个工具的工作原理。当...

    mybatis自动生成Java实体类和映射文件的自动生成类工具

    标题中的"mybatis自动生成Java实体类和映射文件的自动生成类工具"指的就是这样的一个辅助开发工具,它可以分析数据库表结构,并根据表信息自动生成对应的Java实体类和Mapper接口及其XML配置文件。 在Java开发中,...

    自动生成java实体类

    这个压缩包文件提供了一个解决方案,允许开发者自动生成基于数据库表结构的Java实体类。 首先,我们需要理解`generator.xml`这个配置文件的作用。它是MyBatis Generator(MBG)的一个配置文件,MBG是一个强大的工具...

    mysql数据库生成java实体类

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

    自动生成实体类....

    在.NET开发环境中,自动生成实体类是一项常见的任务,特别是在基于ORM(对象关系映射)的框架下,如Entity Framework或NHibernate。实体类是数据库表在编程语言中的映射,它们帮助开发者通过对象来操作数据库,减少...

    java ~ mybatis-plus 自动生成实体类 jar

    java ~ mybatis-plus 自动生成实体类 jar

    自动生成Java实体类

    JDBC读取数据库元数据,生成JAVA实体类

    JAVA通过实体生成数据库表

    在这个场景中,"JAVA通过实体生成数据库表"指的是使用特定的工具或框架,根据预先定义好的Java实体类,自动生成对应的数据库表结构。 首先,我们需要理解什么是实体类。在Java中,实体类通常是对应数据库中的一张表...

    java实体类代码生成器 带注释

    Java实体类代码生成器是一种工具,它能够自动化创建Java编程中的数据访问对象(DAO)或实体类,大大节省了开发人员编写重复性代码的时间。实体类通常用于表示数据库中的表或者服务接口的数据结构,它们是ORM(对象...

    实体类自动生成工具..

    因此,实体类自动生成工具应运而生,以提高开发效率,减少重复劳动。 这个名为"个人EntityTool"的压缩包文件,根据其标题和描述,很可能是作者自己编写的一个用于自动生成实体类的工具。这样的工具通常会根据数据库...

    mysql自动生成实体类

    "mysql自动生成实体类"就是这样一个工具,它能够帮助开发者快速地根据MySQL中的表结构生成对应的Java实体类,极大地减少了手动编写代码的工作量。 生成实体类的主要目的是实现对象关系映射(Object-Relational ...

    JDBC读取数据库元数据,自动生成JAVA实体类

    JDBC读取数据库元数据,生成JAVA实体类

Global site tag (gtag.js) - Google Analytics