版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bestxianfeng163/article/details/84850767
package com.zsf.shenzhou.customer.po;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.RowId;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class util {
private String authorName = "史先锋";//作者名字
private String[] colnames; // 列名数组
private String[] colTypes; //列名类型数组
private String[] colComment; //列名注释数组
private int[] colSizes; //列名大小数组
private boolean f_util = false; // 是否需要导入包java.util.*
private boolean f_sql = false; // 是否需要导入包java.sql.*
public static List<String> TBlist() throws SQLException {
List list = null;
Connection con = JDBCUtils.getConnection();
String sql="select table_name from information_schema.tables where table_schema='xianfengdb'";
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs != null) {
list = new ArrayList();
}
while (rs.next())
{
String tableName = rs.getString("table_name");
list.add(tableName);
}
JDBCUtils.colseResource(con, ps, rs);
return list;
}
/*
* 构造函数
*/
public void GenEntityMysql(String tablename,String packageOutPath) throws SQLException{
//创建连接
Connection con = JDBCUtils.getConnection();
//查要生成实体类的表
String sql = "SELECT COLUMN_NAME,COLUMN_TYPE,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name=" + "'"+tablename+"'";
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
int size = getColumnSize(tablename);
colnames = new String[size];
colTypes = new String[size];
colSizes = new int[size];
colComment= new String[size];
int i=0;
while (rs.next())
{
String column_name = rs.getString("column_name");
colnames[i]=column_name;
String column_type = rs.getString("column_type");
System.out.println("+----"+column_type);
colTypes[i]=column_type;
if(colTypes[i].equalsIgnoreCase("datetime")){
f_util = true;
}
if(colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")){
f_sql = true;
}
String column_comment = rs.getString("column_comment");
colComment[i]=column_comment;
System.out.println("+----"+column_comment);
colSizes[i]=1;
i++;
}
JDBCUtils.colseResource(con, ps, rs);
String tableComment= getTableCommentByTName(tablename);
String content = parse(tableComment,colnames,colTypes,colSizes,tablename,packageOutPath);
try {
File directory = new File("");
String path=this.getClass().getResource("").getPath();
System.out.println(path);
System.out.println("src/?/"+path.substring(path.lastIndexOf("/com/", path.length())) );
// String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java";
String outputPath = directory.getAbsolutePath()+ "/src/main/java/"+packageOutPath.replace(".", "/")+"/"+initcap(tablename) + ".java";
FileWriter fw = new FileWriter(outputPath);
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 功能:生成实体类主体代码
* @param colnames
* @param colTypes
* @param colSizes
* @return
*/
private String parse(String tablecomment,String[] colnames, String[] colTypes, int[] colSizes,String tablename,String packageOutPath) {
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");
}
sb.append("package " + packageOutPath + ";\r\n");
sb.append("\r\n");
//注释部分
sb.append(" /**\r\n");
sb.append(" * "+tablename+ "("+tablecomment+"-->) 实体类\r\n");
sb.append(" * "+date2String(new Date())+" By "+this.authorName+"\r\n");
sb.append(" */ \r\n");
//实体部分
sb.append("\r\npublic class " + initcap(tablename) + "{\r\n");
processAllAttrs(sb);//属性
processAllMethod(sb);//get set方法
sb.append("}\r\n");
//System.out.println(sb.toString());
return sb.toString();
}
/**
* 功能:生成所有属性
* @param sb
*/
private void processAllAttrs(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] +"; //"+colComment[i]+ "\r\n");
}
}
/**
* 功能:生成所有方法
* @param sb
*/
private void processAllMethod(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\t/**\r\n\t\t*设置"+colComment[i]+"的方法\r\n\t\t*@param 类型 "+sqlType2JavaType(colTypes[i])+"\r\n\t*/\r\n");
sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " +
colnames[i] + "){\r\n");
sb.append("\t\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
sb.append("\t/**\r\n\t\t*返回"+colComment[i]+"的方法\r\n\t\t*返回类型"+sqlType2JavaType(colTypes[i])+"\r\n\t*/\r\n");
sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n");
sb.append("\t\treturn " + colnames[i] + ";\r\n");
sb.append("\t}\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);
}
/**
* 功能:获得列的数据类型
* @param sqlType
* @return
*/
private String sqlType2JavaType(String sqlType) {
if(sqlType.contains("bit")){
return "boolean";
}else if(sqlType.contains("byte")){
return "byte";
}else if(sqlType.contains("smallint")){
return "short";
}else if(sqlType.contains("int")){
return "int";
}else if(sqlType.contains("bigint")){
return "long";
}else if(sqlType.contains("float")){
return "float";
}else if(sqlType.contains("decimal") || sqlType.contains("numeric")
|| sqlType.contains("real") || sqlType.contains("money")
|| sqlType.contains("smallmoney")){
return "double";
}else if(sqlType.contains("varchar") || sqlType.contains("char")
|| sqlType.contains("nvarchar") || sqlType.contains("nchar")
|| sqlType.contains("text")){
return "String";
}else if(sqlType.contains("datetime")){
return "Date";
}else if(sqlType.contains("image")){
return "Blod";
}
return null;
}
public int getColumnSize(String tablename) throws SQLException{
//创建连接
Connection con = JDBCUtils.getConnection();
//查要生成实体类的表
String sql = "select COLUMN_NAME,count(*) total from INFORMATION_SCHEMA.Columns WHERE table_name=" + "'"+tablename+"'";
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
return rs.getInt("total");
}
JDBCUtils.colseResource(con, ps, rs);
return 1;
}
/**
* 根据表名获取注释
* @throws SQLException
*/
public String getTableCommentByTName(String tablename) throws SQLException{
//创建连接
Connection con = JDBCUtils.getConnection();
//查要生成实体类的表
String sql = "SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES where TABLE_NAME= " + "'"+tablename+"'";
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
return rs.getString("table_comment");
}
JDBCUtils.colseResource(con, ps, rs);
return null;
}
public static String date2String(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatDate = simpleDateFormat.format(date);
return formatDate;
}
/**
* 出口
* TODO
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
//Customer customer=new Customer();
List<String> tBlist = TBlist();
for(String tablename:tBlist){
new util().GenEntityMysql(tablename,"com.zsf.shenzhou.customer.po");;
}
System.out.println();
}
}
package com.zsf.shenzhou.customer.po;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class JDBCUtils {
private static String driver="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://54.222.250.141:3306/xianfengDB?useUnicode=true&characterEncoding=UTF-8";
private static String user="root";
private static String password="123456";
private JDBCUtils(){}
static {
/**
* 驱动注册
*/
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* 获取 Connetion
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param conn
* @param st
* @param rs
*/
public static void colseResource(Connection conn,PreparedStatement ps,ResultSet rs) {
closeResultSet(rs);
closePreparedStatement(ps);
closeConnection(conn);
}
/**
* 释放连接 Connection
* @param conn
*/
public static void closeConnection(Connection conn) {
if(conn !=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//等待垃圾回收
conn = null;
}
/**
* 释放语句执行者 Statement
* @param st
*/
public static void closePreparedStatement(PreparedStatement ps) {
if(ps !=null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//等待垃圾回收
ps = null;
}
/**
* 释放结果集 ResultSet
* @param rs
*/
public static void closeResultSet(ResultSet rs) {
if(rs !=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//等待垃圾回收
rs = null;
}
}