package com.taover.codegenerate.bazhuayun; import java.io.File; import java.io.StringWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.Vector; import com.taover.codegenerate.bazhuayun.model.ApiModel; import com.taover.codegenerate.core.MysqlTableColumn; import com.taover.codegenerate.db.Tools; import freemarker.template.Configuration; import freemarker.template.Template; public class GenerateCode { public static void main(String args[]){ try { generateEntity("com.taover.wxorder", "ecs_shippings_regions", "D:"+File.separator+"dblist", "127.0.0.1", "3306", "tylife", "lexi365", "tylife"); } catch (Exception e) { e.printStackTrace(); } } private static Connection getConnection(String host, String port, String user, String password, String dbName) { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); Properties prop = new Properties(); prop.setProperty("user", user); prop.setProperty("password", password); prop.setProperty("remarks", "true"); conn = DriverManager.getConnection("jdbc:mysql://"+host+":"+port+"/"+dbName, prop); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void generate(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateDto(srcPath, apiModel); generateEntity(srcPath, apiModel); generateManageController(srcPath, apiModel); generateV1Controller(srcPath, apiModel); generateRepository(srcPath, apiModel); generateService(srcPath, apiModel); generateVo(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateDto(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateDto(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateEntity(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateEntity(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateControllerManage(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateManageController(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateControllerV1(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateV1Controller(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateRepository(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateRepository(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateService(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateService(srcPath, apiModel); } System.out.println("处理完成"); } public static void generateVo(String basePackage, String tableNameStr, String srcPath, String host, String port, String user, String password, String dbName) throws Exception{ //取数据库连接 Connection conn = getConnection(host, port, user, password, dbName); //初始化要生成的表列表 List tableNameList = getListTableName(tableNameStr, dbName, conn); for (int i = 0; i < tableNameList.size(); i++) { String tableNameCurr = (String) tableNameList.get(i); //取得表中所有列 Vector columnsInTable = MysqlTableColumn.GetTableInfo(conn, dbName, tableNameCurr, "%", "mysql"); if (columnsInTable == null || columnsInTable.size() == 0) { System.out.println(tableNameCurr + " : 生成失败,得不到表中列明"); continue; } MysqlTableColumn pkcolum = MysqlTableColumn.getPKColum(columnsInTable); if (pkcolum == null) { System.out.println(tableNameCurr + " : 生成失败,未设置主键"); continue; } ApiModel apiModel = new ApiModel(dbName, tableNameCurr, columnsInTable, "1.0.0", basePackage); generateVo(srcPath, apiModel); } System.out.println("处理完成"); } private static List getListTableName(String tableNameStr, String dbName, Connection conn) throws Exception{ List tableNameList = new ArrayList(); if ("ALL".equalsIgnoreCase(tableNameStr) ) { String sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '"+dbName+"'"; ResultSet rs = Tools.executeQuery(Tools.createStmt(conn), sql); if(rs == null){ throw new Exception("查询数据表名称失败"); } try { while (rs.next()) { tableNameList.add(rs.getString("Table_name")); } } catch (SQLException e) { e.printStackTrace(); } Tools.close(rs); } else { String[] TableNameArr = tableNameStr.split(","); for (int i = 0; i < TableNameArr.length; i++) tableNameList.add(TableNameArr[i]); } return tableNameList; } private static String renderByTemplate(String templateName, ApiModel apiModel) throws Exception{ Configuration cfg = new Configuration(); //String comPath = GenerateCode.class.getResource("/").getPath(); //File f = new File(comPath+File.separator+"com"+File.separator+"taover"+File.separator+"codegenerate"+File.separator+"bazhuayun"+File.separator+"template"); //cfg.setDirectoryForTemplateLoading(f); cfg.setClassForTemplateLoading(GenerateCode.class, "/template/bazhuayun"); Template template = cfg.getTemplate(templateName); StringWriter out = new StringWriter(); template.process(apiModel, out); return out.toString(); } private static void generateDto(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"bean"+File.separator+"dto"; Tools.createFile(filePath, apiModel.getDtoClassSimpleName()+".java", renderByTemplate("DtoTemplate.ftl", apiModel), false); } private static void generateEntity(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"bean"+File.separator+"entity"; Tools.createFile(filePath, apiModel.getEntityClassSimpleName()+".java", renderByTemplate("EntityTemplate.ftl", apiModel), false); } private static void generateManageController(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"controller"+File.separator+"manage"; Tools.createFile(filePath, apiModel.getControllerClassName()+".java", renderByTemplate("ManageControllerTemplate.ftl", apiModel), false); } private static void generateV1Controller(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"controller"+File.separator+"v1"; Tools.createFile(filePath, apiModel.getControllerClassName()+".java", renderByTemplate("V1ControllerTemplate.ftl", apiModel), false); } private static void generateRepository(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"repository"; Tools.createFile(filePath, apiModel.getRepositoryClassSimpleName()+".java", renderByTemplate("RepositoryTemplate.ftl", apiModel), false); } private static void generateService(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"service"; Tools.createFile(filePath, apiModel.getServiceClassSimpleName()+".java", renderByTemplate("ServiceTemplate.ftl", apiModel), false); String fileImplPath = srcPath+File.separator+modelPath+File.separator+"service"+File.separator+"impl"; Tools.createFile(fileImplPath, apiModel.getServiceImplClassSimpleName()+".java", renderByTemplate("ServiceImplTemplate.ftl", apiModel), false); } private static void generateVo(String srcPath, ApiModel apiModel) throws Exception{ String modelPath = apiModel.getBasePackage().replace(".", File.separator); String filePath = srcPath+File.separator+modelPath+File.separator+"bean"+File.separator+"vo"; Tools.createFile(filePath, apiModel.getVoClassSimpleName()+".java", renderByTemplate("VoTemplate.ftl", apiModel), false); } }