You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
9.7 KiB
204 lines
9.7 KiB
package org.yangliu.codegenerate;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.google.common.base.CaseFormat;
|
|
import freemarker.cache.ClassTemplateLoader;
|
|
import freemarker.core.XMLOutputFormat;
|
|
import freemarker.template.Configuration;
|
|
import freemarker.template.Template;
|
|
import freemarker.template.TemplateException;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.yangliu.codegenerate.entity.TableEntityVo;
|
|
import org.yangliu.codegenerate.entity.TableVo;
|
|
import org.yangliu.codegenerate.util.MarkerGenerate;
|
|
import org.yangliu.codegenerate.util.TableFieldUtil;
|
|
|
|
import java.io.*;
|
|
import java.sql.Connection;
|
|
import java.sql.DatabaseMetaData;
|
|
import java.sql.DriverManager;
|
|
import java.sql.ResultSet;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* @Description
|
|
* @Author ZhouWenTao
|
|
* @Date 2023/8/13 19:16
|
|
*/
|
|
public class Main {
|
|
//包名
|
|
private static String bussi_package = "com.enjoy.oqc";
|
|
//生成项目目录
|
|
private static String project_path = "E:\\workspace_2\\enjoy\\qms\\enjoy-oqc\\src\\main\\java\\";
|
|
|
|
private static String project_resource_mapper_path = "E:\\workspace_2\\enjoy\\qms\\enjoy-oqc\\src\\main\\resources\\mapper\\oqc\\";
|
|
|
|
//实体类模板
|
|
private static String bussi_entity_template = "XXXEntity.javai";
|
|
private static String bussi_entity_excel_template = "XXXEntityExcel.javai";
|
|
|
|
private static String bussi_entity_dto_template = "XXXEntityDTO.javai";
|
|
private static String bussi_entity_vo_template = "XXXEntityVO.javai";
|
|
private static String bussi_entity_add_vo_template = "XXXEntityAddPVO.javai";
|
|
private static String bussi_entity_edit_vo_template = "XXXEntityEditPVO.javai";
|
|
private static String bussi_entity_query_vo_template = "XXXEntityQueryVO.javai";
|
|
|
|
|
|
//mapper模板
|
|
private static String bussi_mapper_template = "XXXMapper.javai";
|
|
//mapper.xml模板
|
|
private static String bussi_mapperxml_template = "XXXMapper.xmli";
|
|
//service 模板
|
|
private static String bussi_service_template = "XXXService.javai";
|
|
private static String bussi_serviceimpl_template = "XXXServiceImpl.javai";
|
|
//controller
|
|
private static String bussi_controller_template = "XXXController.javai";
|
|
|
|
//模板所在目录
|
|
private static String templatepath = "/yangliu/";
|
|
|
|
private static String author = "yangliu";
|
|
// postgresql或mysql
|
|
private static String dbType = "postgresql";
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
//1.数据库配置
|
|
String driver = "org.postgresql.Driver";
|
|
String url = "jdbc:postgresql://10.201.145.19:35432/enjoy-oqc?stringtype=unspecified&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false";
|
|
String user = "enjoy";
|
|
String password = "Nomi1234";
|
|
//2.选择表配置
|
|
String json="{\"oqc_shipment_record\":\"成品出货记录\"}";
|
|
JSONObject tables = JSONObject.parseObject(json);
|
|
for (String table : tables.keySet()) {
|
|
String entityName = TableFieldUtil.tableNameToEntityName(table);
|
|
String description = tables.getString(table);
|
|
System.out.println(String.format("表名:%s,实体类:%s,备注:%s",table,entityName,description));
|
|
String primaryKeyField = "id";//主键
|
|
List<TableEntityVo> tableEntityVoList = printTableStructure(driver, url, user, password, table);
|
|
//3.生成
|
|
generate(bussi_package, table,primaryKeyField,entityName,description, tableEntityVoList);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param bussiPackage
|
|
* @param tableName
|
|
* @param entityName
|
|
* @param originalColumns
|
|
*/
|
|
private static void generate(String bussiPackage,String tableName,String primaryKeyField,String entityName,String description, List<TableEntityVo> originalColumns) {
|
|
TableVo tableVo = new TableVo();
|
|
tableVo.setFtlDescription(description);
|
|
//包名
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
dataMap.put("bussiPackage", bussiPackage);//包
|
|
dataMap.put("entityPackage", "domain");//实体类包名 domain/entity
|
|
dataMap.put("excelPackage","oqcExcel");//导出Excel类的包
|
|
dataMap.put("tableName", tableName);//表名称
|
|
dataMap.put("tableVo", tableVo);//表属性
|
|
//主键
|
|
dataMap.put("primaryKeyField",primaryKeyField);
|
|
|
|
dataMap.put("entityName", entityName);//实体类名称
|
|
dataMap.put("author", author);//作者
|
|
dataMap.put("originalColumns", originalColumns);//字段
|
|
|
|
StringBuffer parsePath = new StringBuffer(project_path);
|
|
if (StringUtils.isNotBlank(bussi_package)) {
|
|
String[] bussiPackageSplit = bussi_package.split("\\.");
|
|
for (String bpackage : bussiPackageSplit) {
|
|
parsePath = parsePath.append(bpackage).append(File.separator);
|
|
}
|
|
}
|
|
//生成实体类
|
|
String entityParsePath = parsePath + (String) dataMap.get("entityPackage") + File.separator;
|
|
MarkerGenerate.generate(templatepath, bussi_entity_template, entityParsePath, entityName + ".java", dataMap);
|
|
String dtoParsePath = parsePath + "dto" + File.separator;
|
|
MarkerGenerate.generate(templatepath, bussi_entity_dto_template, dtoParsePath, entityName + "DTO.java", dataMap);
|
|
|
|
//excel
|
|
String excelParsePath=parsePath +(String) dataMap.get("excelPackage")+ File.separator;;
|
|
MarkerGenerate.generate(templatepath, bussi_entity_excel_template, excelParsePath, entityName + "Excel.java", dataMap);
|
|
|
|
String voParsePath = parsePath + "vo" + File.separator;
|
|
//MarkerGenerate.generate(templatepath, bussi_entity_vo_template, voParsePath, entityName + "VO.java", dataMap);
|
|
//add_pvo
|
|
MarkerGenerate.generate(templatepath, bussi_entity_add_vo_template, voParsePath, "Add"+entityName + "PVO.java", dataMap);
|
|
//edit_pvo
|
|
MarkerGenerate.generate(templatepath, bussi_entity_edit_vo_template, voParsePath, "Edit"+entityName + "PVO.java", dataMap);
|
|
//query_pvo
|
|
MarkerGenerate.generate(templatepath, bussi_entity_query_vo_template, voParsePath, "Query"+entityName + "VO.java", dataMap);
|
|
|
|
//生成Mapper
|
|
String mapperParsePath = parsePath + "mapper" + File.separator;
|
|
MarkerGenerate.generate(templatepath, bussi_mapper_template, mapperParsePath, entityName + "Mapper.java", dataMap);
|
|
|
|
//生成Mapper.xml
|
|
String mapperXmlParsePath = project_resource_mapper_path;
|
|
MarkerGenerate.generate(templatepath, bussi_mapperxml_template, mapperXmlParsePath, entityName + "Mapper.xml", dataMap);
|
|
//生成Service
|
|
String serviceParsePath = parsePath + "service" + File.separator;
|
|
MarkerGenerate.generate(templatepath,bussi_service_template,serviceParsePath,String.format("I%sService.java",entityName),dataMap);
|
|
//生成ServiceImpl
|
|
String serviceImplParsePath = serviceParsePath+"impl"+File.separator;
|
|
MarkerGenerate.generate(templatepath,bussi_serviceimpl_template,serviceImplParsePath,String.format("%sServiceImpl.java",entityName),dataMap);
|
|
//生成Controller
|
|
String controllerParsePath = parsePath + "controller" + File.separator;
|
|
MarkerGenerate.generate(templatepath,bussi_controller_template,controllerParsePath,String.format("%sController.java",entityName),dataMap);
|
|
|
|
}
|
|
|
|
/**
|
|
* 打印所有表结构
|
|
*
|
|
* @param driver driver
|
|
* @param url url
|
|
* @param user user
|
|
* @param password password
|
|
* @throws Exception exception
|
|
*/
|
|
private static List<TableEntityVo> printTableStructure(String driver, String url, String user, String password, String table) throws Exception {
|
|
Class.forName(driver);
|
|
Connection connection = DriverManager.getConnection(url, user, password);
|
|
|
|
DatabaseMetaData metaData = connection.getMetaData();
|
|
// 获取所有表
|
|
//ResultSet tableResultSet = metaData.getTables(null, null, table+"%", new String[]{"TABLE"});
|
|
//单表
|
|
ResultSet tableResultSet = metaData.getTables(null, null, table, new String[]{"TABLE"});
|
|
List<TableEntityVo> tableEntityVoList = new ArrayList<>();
|
|
while (tableResultSet.next()) {
|
|
String tableName = tableResultSet.getString("TABLE_NAME");
|
|
System.out.println("table:" + tableName);
|
|
// 获取表字段结构
|
|
ResultSet columnResultSet = metaData.getColumns(null, "%", tableName, "%");
|
|
while (columnResultSet.next()) {
|
|
// 字段名称
|
|
String columnName = columnResultSet.getString("COLUMN_NAME");
|
|
// 数据类型
|
|
String columnType = columnResultSet.getString("TYPE_NAME");
|
|
// 字段长度
|
|
int datasize = columnResultSet.getInt("COLUMN_SIZE");
|
|
// 小数部分位数
|
|
int digits = columnResultSet.getInt("DECIMAL_DIGITS");
|
|
// 是否可为空 1代表可空 0代表不可为空
|
|
int nullable = columnResultSet.getInt("NULLABLE");
|
|
// 描述
|
|
String remarks = columnResultSet.getString("REMARKS");
|
|
if (remarks==null) {
|
|
remarks="";
|
|
}
|
|
System.out.println(columnName + " " + columnType + " " + datasize + " " + digits + " " + nullable + " " + remarks);
|
|
String entityField = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, columnName);
|
|
tableEntityVoList.add(new TableEntityVo(columnName,entityField,TableFieldUtil.fieldTypeParseJava(dbType, columnType), columnType, remarks));
|
|
}
|
|
System.out.println("=================================");
|
|
}
|
|
connection.close();
|
|
return tableEntityVoList;
|
|
}
|
|
|
|
}
|