代码如下:
package com.nagios.info.entity;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.chinaoly.utils.DateFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
* @author cunxp
* @Description
* @date 2018-01-09 下午4:34
*/
public class CodeProduct {
private String packageOutPath = "com.nagios.info.entity";//指定实体生成所在包的路径
private static String authorName = "cunxp";//作者名字
private String tablename = "nagios_hoststatus";//表名
//数据库连接
private static final String URL ="jdbc:mysql://192.168.16.84:3306/nagios?useUnicode=true&characterEncoding=UTF8";
private static final String NAME = "root";
private static final String PASS = "chinaoly";
private static final String DRIVER ="com.mysql.jdbc.Driver";
/*
* 构造函数
*/
public CodeProduct(){
//创建连接
Connection con;
//查要生成实体类的表
String sql = "show full columns from " + tablename;
PreparedStatement pStemt = null;
try {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
con = DriverManager.getConnection(URL,NAME,PASS);
pStemt = con.prepareStatement(sql);
ResultSet rs = pStemt.executeQuery();
List<ColumnEntity> list=new ArrayList<>();
while (rs.next()){
ColumnEntity ce=new ColumnEntity();
ce.setName(rs.getString("Field"));
String type = rs.getString("Type");
ce.setDataType(parseType(type));
list.add(ce);
}
String content = parse(list);
try {
File directory = new File("");
String path=this.getClass().getResource("").getPath();
//System.out.println(path);
// String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java";
String outputPath = directory.getAbsolutePath()+ "/src/main/java/"+this.packageOutPath.replace(".", "/")+"/"+replaceUnderlineAndfirstToUpper(tablename.toLowerCase(),"_","")+".java";
File file=new File(outputPath);
System.out.println("----------->"+outputPath);
if(!file.exists()){
file.createNewFile();
}
FileWriter fw = new FileWriter(outputPath);
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
// try {
// con.close();
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
private String parse(List<ColumnEntity> list) {
StringBuffer sb = new StringBuffer();
sb.append("package " + this.packageOutPath + ";\r\n");
//tablename=replaceUnderlineAndfirstToUpper(tablename.toLowerCase(),"_","");
importPackage(sb,this.packageOutPath+"."+initcap(tablename));
//注释部分
infoMsg(sb,tablename+"实体类");
//实体部分
sb.append("@Entity\r\n");
sb.append("@Table(name = \""+tablename+"\")\r\n");
sb.append("public class " + replaceUnderlineAndfirstToUpper(tablename.toLowerCase(),"_","")
+" implements Serializable"+"{\r\n");
sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");
sb.append("\r\n");
addElement(sb,list);
sb.append("}\r\n");
return sb.toString();
}
/**
* 导入包
*@title
*@date 2014-10-17
*@author ZhengYunfei
* @param sb
*/
public static void importPackage(StringBuffer sb,String tablename){
sb.append("\r\n");
sb.append("import javax.persistence.Column;\r\n");
sb.append("import javax.persistence.Entity;\r\n");
sb.append("import javax.persistence.Id;\r\n");
sb.append("import javax.persistence.Table;\r\n");
sb.append("import java.io.Serializable;\r\n");
sb.append("import java.util.Date;\r\n");
sb.append("\r\n");
}
public static void addElement(StringBuffer sb,List<ColumnEntity> list){
for (ColumnEntity ce:list) {
sb.append("\t@Column(name = \""+ce.getName()+"\")\r\n");
sb.append("\tprivate "+ce.getDataType()+" "+ce.getName()+";\r\n");
sb.append("\r\n");
}
}
/**
* 自动生成注释
*@title
*@date 2014-10-17
*@author ZhengYunfei
*/
public static void infoMsg(StringBuffer sb,String msg){
sb.append("/**\r\n");
sb.append("*@author "+authorName+"\r\n");
sb.append("*@Description "+msg+"\r\n");
sb.append("*@date "+ DateFormatUtil.getStringByDate()+"\r\n");
sb.append("*/\r\n");
sb.append("\r\n");
}
/**
* 首字母大写
*
* @param srcStr
* @return
*/
public static String firstCharacterToUpper(String srcStr) {
return srcStr.substring(0, 1).toUpperCase() + srcStr.substring(1);
}
/**
* 替换字符串并让它的下一个字母为大写
* @param srcStr
* @param org
* @param ob
* @return
*/
public static String replaceUnderlineAndfirstToUpper(String srcStr,String org,String ob)
{
String newString = "";
int first=0;
while(srcStr.indexOf(org)!=-1)
{
first=srcStr.indexOf(org);
if(first!=srcStr.length())
{
newString=newString+srcStr.substring(0,first)+ob;
srcStr=srcStr.substring(first+org.length(),srcStr.length());
srcStr=firstCharacterToUpper(srcStr);
}
}
newString=firstCharacterToUpper(newString+srcStr);
return newString;
}
/**
* 功能:将输入字符串的首字母改成大写
* @param str
* @return
*/
private static 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 static String parseType(String type) {
if(type.toLowerCase().contains("int")){
return "Integer";
}
if(type.toLowerCase().contains("varchar")){
return "String";
}
if(type.toLowerCase().contains("datetime")){
return "Date";
}
if(type.toLowerCase().contains("text")){
return "String";
}
if(type.toLowerCase().contains("double")){
return "Double";
}
return null;
}
private class ColumnEntity{
private String name;
private String dataType;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
}
/**
* 出口
* TODO
* @param args
*/
public static void main(String[] args) {
new CodeProduct();
}
}
参考链接 参考博客中生成的其实是serviceimpl文件不是实体类,不过可以参考。