java通过SQL生成实体类".java"文件
博客专区 > lzgsea 的博客 > 博客详情
java通过SQL生成实体类".java"文件
lzgsea 发表于1年前
java通过SQL生成实体类".java"文件
  • 发表于 1年前
  • 阅读 25
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

生成实体类文件工具类

1、获取SQL查询语句中所有字段名称

2、将字段名称转换为java类中属性名称

3、获取所有字段的数据库类型

4、将数据库类型转换为java类对应的类型

5、处理特殊类型是否需要导入相关的类

6、处理java类中的get和set方法

7、将内容写入到文件中

备注:该工具类适用于Oracle数据库,数据库字段名称类似USER_NAME,以"_"分割单词,转换为java类中属性名称为userName。

代码如下:

package com.lzgsea.sql;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 创建实体类工具类
 * 1、获取数据库表的字段名称
 * 2、将字段名称转换为对应的类的属性名称
 * 3、添加需要导入的包
 * 4、添加属性类型
 * 5、生成get和set方法
 * 6、写入到文件中
 * 
 * @author lzgsea
 *
 */
public class CreateEntityUtil {
	
	public static Connection conn; //数据库连接
	
	/**
	 * 创建实体类文件
	 * @param sql sql查询语句
	 * @param className 类名
	 * @param packageName 包名
	 * @param filePath 生成文件路径
	 * @param conn 数据库连接
	 */
	public static void createEentity(String sql,String className,String packageName,
			String filePath,Connection conn){
		PreparedStatement ps = null;
		ResultSet rs = null;
		Set<String> importSet = new HashSet<String>(); //需要导入的包
		StringBuffer propertyTxt = new StringBuffer(); //属性
		StringBuffer methodTxt = new StringBuffer(); //方法
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			int columCount = rs.getMetaData().getColumnCount(); //字段数量
			for(int i=1;i<=columCount;i++){
				String columnName = rs.getMetaData().getColumnName(i); //获取字段名称
				String propertyName = convertColumnName(columnName); //转换成属性名称
				String typeName = rs.getMetaData().getColumnTypeName(i); //获取字段类型
				String propertyType = ""; //属性类型
				String importClass = ""; //需要导入的类
				if(typeName.toUpperCase().equals("NUMBER")&&rs.getMetaData().getScale(i)>0){
					propertyType = "Double";
				}else if(typeName.toUpperCase().equals("NUMBER")){
					propertyType = "Long";
				}else if(typeName.toUpperCase().equals("DATE")){
					propertyType = "Date";
					importClass = "java.sql.Date";
				}else if(typeName.toUpperCase().equals("TIMESTAMP")){
					propertyType = "Timestamp";
					importClass = "java.sql.Timestamp";
				}else if(typeName.toUpperCase().equals("BLOB")){
					propertyType = "Blob";
					importClass = "java.sql.Blob";
				}else if(typeName.toUpperCase().equals("CLOB")){
					propertyType = "Clob";
					importClass = "java.sql.Clob";
				}else{
					propertyType = "String";
				}
				propertyTxt.append("\tprivate "+propertyType+" "+propertyName+";\r\n"); //属性
				if(importClass.trim().length()>0){
					importSet.add(importClass); //添加需要导入的类
				}
				//get方法名称
				String getterName = "get"+propertyName.substring(0,1).toUpperCase()+propertyName.substring(1,propertyName.length());
				//set方法名称
				String setterName = "set"+propertyName.substring(0,1).toUpperCase()+propertyName.substring(1,propertyName.length());
				String getterMethod = "\tpublic "+propertyType+" "+getterName+"(){\r\n\t\treturn this."+propertyName+";\r\n\t}\r\n";
				String setterMethod = "\tpublic void "+setterName+"("+propertyType+" "+propertyName+"){\r\n\t\tthis."+propertyName+"="+propertyName+";\r\n\t}\r\n";
				methodTxt.append(getterMethod); //添加get方法
				methodTxt.append(setterMethod); //添加set方法
			}
			
			StringBuffer txt = new StringBuffer(); //java类内容
			txt.append("package "+packageName+";\r\n"); //包
			txt.append("\r\n");
			Iterator<String> it = importSet.iterator(); //导入类
			while(it.hasNext()){
				txt.append("import "+it.next()+";\r\n");
			}
			txt.append("\r\n");
			txt.append("public class "+className+"{\r\n"); //类名
			txt.append("\r\n");
			txt.append(propertyTxt); //属性内容
			txt.append("\r\n");
			txt.append(methodTxt); //get和set方法名
			txt.append("}"); 
			System.out.println(txt.toString()); 
			String fileName = className+".java"; //文件名
			File file = new File(filePath,fileName); 
			writeByFileWriter(txt.toString(), file, false); //创建文件
			
		} catch (Exception e) {
			System.out.println("ERROR: "+e);
			e.printStackTrace();
		} finally {
			try {
				if(ps!=null) ps.close();
				if(rs!=null) rs.close();
			} catch (Exception e2) {
				System.out.println("ERROR: "+e2);
				e2.printStackTrace();
			}
		}
	}
	
	/**
	 * 将数据库中表的字段名称转换为java类中的属性名称(例如:USER_NAME 转为  userName)
	 * @param columnName 字段名称
	 * @return 属性名称
	 */
	public static String convertColumnName(String columnName){
		columnName = columnName.toLowerCase(); //字段名称转为小写
		char[] arr = columnName.toCharArray(); //字段名称转为char数组
		boolean isToUpper = false; //判断是否大写
		String property = ""; //属性名称
		for(int i=0;i<arr.length;i++){ //循环遍历字段数值
			if(arr[i]=='_'){ //判断是否是"_",如果是下一个字符要大写
				isToUpper = true;
				continue;
			}
			if(isToUpper){//大写字符
				property += String.valueOf(arr[i]).toUpperCase();
			}else{
				property += String.valueOf(arr[i]);
			}
			isToUpper = false;
		}
		return property;
	}
	
	/**
	 * 写入文件
	 * @param area 写入文件的内容
	 * @param file 写入的文件,文件不存在则创建
	 * @param append true是追加,false是覆盖
	 */
	public static void writeByFileWriter(String area,File file, boolean append) throws Exception{
		FileWriter fw = null;
		BufferedWriter bufferedWriter = null;
		try{
			if(!file.exists()){ //文件不存在则新建
				file.createNewFile();
			}
			fw = new FileWriter(file,append);
			bufferedWriter = new BufferedWriter(fw);
			bufferedWriter.write(area+"\r\n");
			
		}catch(Exception e){
			throw e;
		} finally {
			if(bufferedWriter!=null) bufferedWriter.close();
			if(fw!=null) fw.close();
		}
	}
	
	/**
	 * 获取Oracle数据连接
	 * @param ip 数据库连接地址
	 * @param port 数据库连接端口号
	 * @param sid 数据库实例名
	 * @param user 数据库用户名
	 * @param password 密码
	 * @return
	 */
	public static Connection getOracleConnection(String ip, int port, String sid, 
			String user, String password){
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@"+ip+":"+port+":"+sid;;
		try {
			Class.forName(driver); //加载驱动
			conn = DriverManager.getConnection(url, user, password); //连接
		} catch (ClassNotFoundException e) {
			System.out.println("加载驱动失败:找不到驱动类:"+e);
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("数据库连接异常:"+e);
			e.printStackTrace();
		}
		return conn;
	}
	
	
	public static void main(String[] args) {
		String user = "LYLX2.3";
		String password = "123456";
		Connection conn = null;
		try {
			conn = getOracleConnection("127.0.0.1", 1521, "orcl", user, password);
			createEentity("SELECT * FROM PMS_USER", "PmsUser", "com.liuzg.sql", "E:\\", conn);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null) conn.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
		}
	}

}

 

标签: Java
共有 人打赏支持
粉丝 0
博文 7
码字总数 1549
×
lzgsea
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: