GenerateEntity实体类快速生成
简介
通常情况下,我们建好数据库,并且将表与表中的字段全部设计好之后.
后台的工程师就该对应着表与表中的字段把实体类一一对应的建起来,这都是有规律的.
如果我们的表名全部使用小写,并且单词之间用下划线隔开:例如,order_desc
(Java中对应OrderDesc
)
字段名,也采用全部小写,并且单词之间用下划线隔开:例如,stu_name
(Java中对应:stuName
)
由于,在此种情况下有着很强的规律性,因此,自行设计以下工具类实现实体类的快速生成。避免做简单且重复的工作。
GenerateEntity类
GenerateEntity
提供upperCase
与lowerCase
方法各两种,小伙伴们可以按照需求进行选择哦!不需要的注释掉就可以,比如选择只讲第一个字母大写,其余不管的形式创建类名,则选择对应upperCase方法即可(方法头部有注释!),另一个upperCase需要注释掉,否则编译报错。
注释中,括号(必填)的为必填项,根据自己的开发环境进行填写。需要强调的是设置实体包名路径配置,private static String PACKAGE_PATH = "entity";
实体包名路径,这个是类在哪个包下面,即 package entity;
private static String FILE_PATH = "/src/entity/";
实体文件写入路径,如果是Java项目,路径为/src/entity/
,如果为maven项目,路径为/src/main/java/entity/
。具体情况具体分析。
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class GenerateEntity {
//设置数据库链接配置
private static Connection conn;
//连接驱动名称(必填)
private static String CLASSNAME = "com.mysql.jdbc.Driver";
//数据库url路径(必填)
private static String URL = "jdbc:mysql:///inventory?characterEncoding=utf8";
//用户名(必填)
private static String USER = "root";
//密码(必填)
private static String PWD = "";
//数据库的名称(必填)
private static String TABLE_SCHEAME = "inventory";
//设置实体包名路径配置(必填)
private static String PACKAGE_PATH = "entity";//实体包名路径
private static String FILE_PATH = "/src/entity/";//实体文件写入路劲
public static void main(String[] args) throws Exception {
try {
System.out.println("开始链接数据库....................");
Class.forName(CLASSNAME);
conn = (Connection)DriverManager.getConnection(URL,USER,PWD);
System.out.println("数据库了链接成功");
String sql = "select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='" +
TABLE_SCHEAME + "';";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
System.out.println("开始生成实体..............");
while(rs.next()) {
StringBuffer sb = new StringBuffer();
StringBuffer sbf = new StringBuffer();
StringBuffer cst1 = new StringBuffer();
StringBuffer cst2 = new StringBuffer();
StringBuffer cst3 = new StringBuffer();
StringBuffer toStr = new StringBuffer();
sb.append("package " + PACKAGE_PATH + ";\r\n");
cst1.append("\r\n public " + upperCase(rs.getString(1)) + "() " + "{\n\n}\n "
+"\r\n public " + upperCase(rs.getString(1)));
toStr.append("\r\n @Override ");
toStr.append("\r\n public String toString() {\n return");
sb.append("\r\npublic class " + upperCase(rs.getString(1)) + "{\r\n");
ps = conn.prepareStatement("desc " + rs.getString(1));
ResultSet rsTable =(ResultSet)ps.executeQuery();
boolean bool = true;
int i =1;
int col = rsTable.getMetaData().getColumnCount();
while (rsTable.next()) {
String name = lowerCase(rsTable.getString(1));//字段名
if("class".equals(name)) {
name = "nameClass";
}
String type = rsTable.getString(2);
if(type.contains("int") || type.contains("bigInt")) {
type = "int";
} else if(type.contains("text") || type.contains("char")) {
type = "String";
} else if(type.contains("float")) {
type = "float";
} else if(type.contains("decimal") || type.contains("numeric")
|| type.contains("real") || type.contains("money")
|| type.contains("smallmoney")) {
type = "double";
} else if (type.contains("date") || type.contains("datetime") || type.contains("bit")) {
if(bool) {
int a = sb.indexOf("\n");
sb.insert(a, "\r\nimport java.sql.Timestamp;");
bool = false;
}
type = "Timestamp";
}
sb.append("\r\n private " + type + " " + name + ";\r\n");
sbf.append("\r\n public void set"
+ upperCase(name) + "(" + type + " " + name + ") {");
sbf.append("\r\n this." + name + " = " + name +";\r\n }\r\n");
sbf.append("\r\n public " + type + " get" + upperCase(name)
+ "() {\r\n " + "return " + name + ";\r\n}\r\n");
if(i == 1) {
cst2.append(" (" + type + " " + name);
cst3.append(") {\nthis." + name + " = " + name + ";");
toStr.append(" \"" + upperCase(rs.getString(1)) + " [" + name
+ "=\"" + " + " + name + " + ");
} else {
toStr.append("\", " + name + "=\" + " + name + " + " );
cst2.append(", " + type + " " + name );
cst3.append("\nthis." + name + " = " + name + ";");
}
if(i%3 == 0){
toStr.append("\n");
}
i++;
}
cst3.append("\n}");
toStr.append("\"]\";\n}\n}");
String entity = sb.toString() +cst1.toString() + cst2.toString() + cst3.toString() + sbf.toString() + toStr.toString();
System.out.println("写入实体: " + upperCase(rs.getString(1) + "..........."));
File directory = new File("");
String outputPath = directory.getAbsolutePath() + FILE_PATH + upperCase(rs.getString(1)) +
".java";
System.out.println(directory.getAbsolutePath() + FILE_PATH + upperCase(rs.getString(1)) +
".java");
FileWriter fw = new FileWriter(outputPath);
PrintWriter pw = new PrintWriter(fw);
pw.println(entity);
pw.flush();
pw.close();
}
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 字符串首字母转为大写,其余不变
* 例如:order_desc --> Order_desc
*/
/* public static String upperCase(String str) {
return str.substring(0,1).toUpperCase() + str.substring(1);
}*/
/**
* 将字符串以 '-' 分割为String[]
* 然后,将String[] 中的每个 String首字母大写,最后进行拼接
* 例如:order_desc --> OrderDesc
*/
public static String upperCase(String str) {
String[] arrays = str.split("_");
for (int i = 0; i < arrays.length; i++) {
arrays[i] = arrays[i].substring(0,1).toUpperCase()+arrays[i].substring(1);
}
String newStr = "";
for (int i = 0; i < arrays.length; i++) {
newStr += arrays[i];
}
return newStr;
}
/**
* 字符串首字母转为小写,其余不变
* 例如:Stu_name --> stu_name
*/
/* public static String lowerCase(String str) {
return str.substring(0,1).toLowerCase() + str.substring(1);
}*/
/**
* 将字符串以 '-' 分割为String[]
* 然后,将String[] 中的除了第一个以外的每个 String首字母大写,最后进行拼接
* 第一个的首字母转换为小写
* 例如:stu_name --> stuName
*/
public static String lowerCase(String str) {
String[] arrays = str.split("_");
if(arrays.length > 0){
arrays[0] = arrays[0].substring(0,1).toLowerCase() + arrays[0].substring(1);
}
for (int i = 1; i < arrays.length; i++) {
arrays[i] = arrays[i].substring(0,1).toUpperCase()+arrays[i].substring(1);
}
String newStr = "";
for (int i = 0; i < arrays.length; i++) {
newStr += arrays[i];
}
return newStr;
}
}
实现效果图
包结构与上图一致(作为测试使用,真正的项目开发不是此种结构)
但是因为是Maven项目,因此private static String FILE_PATH = "/src/main/java/entity/";
运行GenerateEntity类,将数据库中的表与字段对应到Java中的实体类中,如下图
实体类中自动生成变量、无参构造、有参构造、getter方法、setter方法与toString方法,给小伙伴们看个例子,如下图
这些都是自动生成的,不是一个一个手敲的哦!