package cn.javadog.ec.utils;
import com.jfinal.kit.Kv;
import com.jfinal.kit.PropKit;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import com.jfinal.template.source.ClassPathSourceFactory;
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.HashMap;
import java.util.List;
import java.util.Map;
public class Generator {
static {
PropKit.use("config/config.txt");
}
private static final String URL = PropKit.get("jdbcUrl");
private static final String NAME = PropKit.get("user");
private static final String PASS = PropKit.get("password");
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String PKG = "cn.javadog.ec.entity";
public static void main(String[] args) throws IOException {
String table = "item";
String alias = "Item";
List<Map<String, String>> schema = schema(table);
String modelStr = render(alias,schema);
generate(modelStr, alias);
System.out.println("实体类生成成功");
}
public static void generate(String modelStr, String table) throws IOException {
String outputPath = new File("").getAbsolutePath() +
"/src/main/java/" + PKG.replace(".", "/") + "/" + initcap(table) + ".java";
FileWriter fw = new FileWriter(outputPath);
PrintWriter pw = new PrintWriter(fw);
pw.println(modelStr);
pw.flush();
pw.close();
}
public static String render(String table, List<Map<String, String>> schema) {
Engine engine = Engine.create("myEngine");
engine.setDevMode(true);
engine.setSourceFactory(new ClassPathSourceFactory());
Template template = engine.getTemplate("model/model.java");
String modelStr = template.renderToString(Kv.by("schema", schema).set("name",table));
return modelStr;
}
public static List<Map<String,String>> schema(String table) {
List<Map<String,String>> result = new ArrayList();
try {
Connection conn = DriverManager.getConnection(URL, NAME, PASS);
Class.forName(DRIVER);
try {
DatabaseMetaData metaData = conn.getMetaData();
ResultSet resultSet = metaData.getTables(null, "%", table, new String[] { "TABLE" });
while (resultSet.next()) {
String tableName=resultSet.getString("TABLE_NAME");
if(tableName.equals(table)){
ResultSet rs = metaData.getColumns(null, null,tableName.toUpperCase(), "%");
while(rs.next()){
Map map = new HashMap();
String colName = rs.getString("COLUMN_NAME");
map.put("colName", colName);
String remarks = rs.getString("REMARKS");
if(remarks == null || remarks.equals("")){
remarks = colName;
}
map.put("remark",remarks);
String dbType = rs.getString("TYPE_NAME");
map.put("dbType",dbType);
map.put("valueType", changeDbType(dbType));
result.add(map);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static String changeDbType(String dbType) {
dbType = dbType.toUpperCase();
switch(dbType){
case "VARCHAR":
case "CHAR":
return "String";
case "NUMBER":
case "DECIMAL":
return "BigDecimal";
case "INT":
case "SMALLINT":
case "INTEGER":
return "Integer";
case "BIGINT":
return "Long";
case "DATETIME":
case "TIMESTAMP":
case "DATE":
return "Date";
case "TINYINT":
return "Boolean";
default:
return "String";
}
}
private static String initcap(String table) {
StringBuffer sb = new StringBuffer();
String[] split = table.split("_");
for (String s : split) {
char[] ch = s.toCharArray();
if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}
sb.append(ch);
}
return sb.toString();
}
}
package cn.javadog.ec.entity;
import io.github.biezhi.anima.Model;
import io.github.biezhi.anima.annotation.Table;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@Accessors(chain = true)
@Table(name = "#(name)")
public class #(name) extends Model {
#for (field : schema)
/**
* #(field.remark)
*/
private #(field.valueType) #(field.colName);
#end
}