| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.utils; |
| | | |
| | | |
| | | import org.apache.velocity.Template; |
| | | import org.apache.velocity.VelocityContext; |
| | | import org.apache.velocity.app.VelocityEngine; |
| | | import org.apache.velocity.runtime.RuntimeConstants; |
| | | import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileWriter; |
| | | import java.io.IOException; |
| | | import java.sql.*; |
| | | import java.util.Date; |
| | | import java.util.*; |
| | | |
| | | // æ¼ç¤ºä¾åï¼æ§è¡ main æ¹æ³æ§å¶å°è¾å
¥æ¨¡å表åå车èªå¨çæå¯¹åºé¡¹ç®ç®å½ä¸ |
| | | public class CodeGenerator { |
| | | public static String packName ="com.doumee"; |
| | | // 设置è¾åºç®å½ |
| | | public static String rootFileDir = "D:/code/idea/initCode/diandongche/"; |
| | | public static String outputDirEntity =rootFileDir+"src/main/java/com/doumee/dao/business/model/"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ |
| | | public static String outputDirMapper = rootFileDir+"src/main/java/com/doumee/dao/business/"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ |
| | | public static String outputDirService =rootFileDir+"src/main/java/com/doumee/service/business/"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ |
| | | public static String outputDirServiceImpl = rootFileDir+"src/main/java/com/doumee/service/business/impl/"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ |
| | | public static String outputDirController =rootFileDir+"src/main/java/com/doumee/api/business/"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ |
| | | public static String outputDirDb =rootFileDir+"db/"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ |
| | | public static void main(String[] args) { |
| | | // é
ç½®æ°æ®åºè¿æ¥ |
| | | String url = "jdbc:mysql://192.168.0.211:3306/diandongche"; |
| | | String username = "root"; |
| | | String password = "Doumee@168"; |
| | | String database = "diandongche"; |
| | | List<String> tables = new ArrayList<>(); |
| | | tables.add("refund"); |
| | | |
| | | for(String tableName : tables){ |
| | | // è·å表信æ¯å¹¶çæä»£ç |
| | | try { |
| | | System.out.println(tableName+"===================çæå¼å§==================="); |
| | | Map<String, Object> tableInfo = getTableInfo(url, username, password, database, tableName); |
| | | generateCode(tableInfo); |
| | | System.out.println(tableName+"===================çæç»æ==================="); |
| | | }catch (Exception e){ |
| | | System.err.println(tableName+"===================çæå¼å¸¸==================="+e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | public static Map<String, Object> getTableInfo(String url, String username, String password, String database, String tableName) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | try (Connection conn = DriverManager.getConnection(url, username, password)) { |
| | | // æ¥è¯¢è¡¨æ³¨é |
| | | String tableQuery = "SELECT table_comment FROM information_schema.tables WHERE table_schema = ? AND table_name = ?"; |
| | | try (PreparedStatement ps = conn.prepareStatement(tableQuery)) { |
| | | ps.setString(1, database); |
| | | ps.setString(2, tableName); |
| | | ResultSet rs = ps.executeQuery(); |
| | | if (rs.next()) { |
| | | map.put("tableComment", rs.getString("table_comment")); |
| | | } |
| | | } |
| | | // æ¥è¯¢åæ®µä¿¡æ¯ auto_increment |
| | | String columnQuery = "SELECT extra,column_name, column_type, column_comment FROM information_schema.columns WHERE table_schema = ? AND table_name = ? order by ordinal_position"; |
| | | List<Map<String, String>> columns = new ArrayList<>(); |
| | | try (PreparedStatement ps = conn.prepareStatement(columnQuery)) { |
| | | ps.setString(1, database); |
| | | ps.setString(2, tableName); |
| | | ResultSet rs = ps.executeQuery(); |
| | | int index = 1; |
| | | while (rs.next()) { |
| | | String javaName = toCamelCase(rs.getString("column_name")); |
| | | String getJavaName = javaName.substring(0,1).toUpperCase()+javaName.substring(1); |
| | | Map<String, String> columnInfo = new HashMap<>(); |
| | | if(rs.getString("extra") !=null |
| | | && rs.getString("extra").contains("auto_increment")){ |
| | | //妿æ¯èªå¢é¿ |
| | | columnInfo.put("auto","1"); // 转æ¢ä¸º Java åéå |
| | | }else{ |
| | | columnInfo.put("auto","0"); // 转æ¢ä¸º Java åéå |
| | | } |
| | | columnInfo.put("index",index++ +""); |
| | | columnInfo.put("columnName", rs.getString("column_name")); |
| | | columnInfo.put("javaName",javaName); // 转æ¢ä¸º Java åéå |
| | | columnInfo.put("getJavaName",getJavaName); // 转æ¢ä¸º Java åéå |
| | | columnInfo.put("javaType", sqlTypeToJavaType(rs.getString("column_type"))); // 转æ¢ä¸º Java ç±»å |
| | | columnInfo.put("comment", rs.getString("column_comment")); |
| | | columns.add(columnInfo); |
| | | } |
| | | } |
| | | map.put("columns", columns); |
| | | map.put("tableName", tableName); |
| | | map.put("entityName", toCamelCase(tableName)); |
| | | } catch (SQLException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | private static String sqlTypeToJavaType(String sqlType) { |
| | | sqlType = sqlType.toLowerCase(); |
| | | if (sqlType.contains("int")) { |
| | | return "Integer"; |
| | | } else if (sqlType.contains("bigint")) { |
| | | return "Long"; |
| | | } else if (sqlType.contains("char") || sqlType.contains("text") || sqlType.contains("varchar")) { |
| | | return "String"; |
| | | } else if (sqlType.contains("datetime") || sqlType.contains("timestamp")) { |
| | | return "Date"; |
| | | } else if (sqlType.contains("date")) { |
| | | return "Date"; |
| | | } else if (sqlType.contains("decimal") || sqlType.contains("double")) { |
| | | return "BigDecimal"; |
| | | } else { |
| | | return "String"; |
| | | } |
| | | } |
| | | |
| | | private static String toCamelCase(String name) { |
| | | StringBuilder result = new StringBuilder(); |
| | | String[] parts = name.split("_"); |
| | | for (int i = 0; i < parts.length; i++) { |
| | | if (i == 0) { |
| | | result.append(parts[i].toLowerCase()); |
| | | } else { |
| | | result.append(Character.toUpperCase(parts[i].charAt(0))).append(parts[i].substring(1).toLowerCase()); |
| | | } |
| | | } |
| | | return result.toString(); |
| | | } |
| | | private static void generateCode(Map<String, Object> tableInfo) { |
| | | // 读åè¡¨ä¿¡æ¯ |
| | | String entityName = (String) tableInfo.get("entityName"); |
| | | String tableName = (String) tableInfo.get("tableName"); |
| | | String tableComment = (String) tableInfo.get("tableComment"); |
| | | List<Map<String, String>> columns = (List<Map<String, String>>) tableInfo.get("columns"); |
| | | |
| | | |
| | | // 设置 Velocity é
ç½® |
| | | VelocityEngine velocityEngine = new VelocityEngine(); |
| | | velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); |
| | | velocityEngine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); |
| | | velocityEngine.init(); |
| | | // é
置模æ¿ç®å½ |
| | | String baseName = entityName.substring(0, 1).toUpperCase() + entityName.substring(1); |
| | | // å建 Velocity ä¸ä¸æ |
| | | Map<String,String> pack = new HashMap<>(); |
| | | pack.put("Base",packName); |
| | | pack.put("Entity",packName+".dao.business.model"); |
| | | pack.put("Controller",packName+".api.business"); |
| | | pack.put("Mapper",packName+".dao.business"); |
| | | pack.put("Service",packName+".service.business"); |
| | | pack.put("ServiceImpl",packName+".service.business.impl"); |
| | | VelocityContext context = new VelocityContext(); |
| | | context.put("package",pack); // 设置å
è·¯å¾ |
| | | context.put("entityName", baseName); |
| | | context.put("entityNameLower", entityName); |
| | | context.put("entityNameLowerFull", entityName.toLowerCase()); |
| | | context.put("tableName", tableName); |
| | | context.put("tableComment", tableComment); |
| | | context.put("columns", columns); |
| | | context.put("nowDate", DateUtil.getPlusTime2(new Date())); |
| | | |
| | | // çæ Entity æä»¶ |
| | | generateFile(velocityEngine, context, "entity.vm", baseName, outputDirEntity , ".java"); |
| | | |
| | | // çæ Mapper æä»¶ |
| | | generateFile(velocityEngine, context, "mapper.vm", baseName, outputDirMapper , "Mapper.java"); |
| | | |
| | | // çæ Service æ¥å£æä»¶ |
| | | generateFile(velocityEngine, context, "service.vm", baseName, outputDirService , "Service.java"); |
| | | |
| | | // çæ ServiceImpl æä»¶ |
| | | generateFile(velocityEngine, context, "serviceImpl.vm", baseName, outputDirServiceImpl + "" , "ServiceImpl.java"); |
| | | |
| | | // çæ Controller æä»¶ |
| | | generateFile(velocityEngine, context, "controller.vm", baseName, outputDirController , "Controller.java"); |
| | | generateFile(velocityEngine, context, "db.vm", baseName, outputDirDb , "Permissions.sql"); |
| | | } |
| | | |
| | | private static void generateFile(VelocityEngine velocityEngine, VelocityContext context, String templateName, String baseName,String outputFilePath,String endName) { |
| | | // è·åæ¨¡æ¿ |
| | | File file = new File(outputFilePath); |
| | | if(!file.isDirectory()){ |
| | | file.mkdirs(); |
| | | } |
| | | System.out.println(file.isFile()); |
| | | Template template = velocityEngine.getTemplate( "templates/"+templateName); |
| | | |
| | | // å建æä»¶è¾åºæµ |
| | | try{ |
| | | |
| | | System.out.println(outputFilePath+baseName+endName+"===================çæå¼å§==================="); |
| | | File f = new File(outputFilePath+baseName+endName); |
| | | if(f.isFile()){ |
| | | f.delete(); |
| | | } |
| | | f.createNewFile(); |
| | | // å°ä¸ä¸ææ°æ®æ¸²æå°æ¨¡æ¿ä¸ |
| | | FileWriter writer = new FileWriter(outputFilePath+baseName+endName); |
| | | template.merge(context, writer); |
| | | writer.flush(); |
| | | writer.close(); |
| | | System.out.println(outputFilePath+baseName+endName+"===================çæç»æ==================="); |
| | | } catch (IOException e) { |
| | | System.err.println(outputFilePath+baseName+endName+"===================çæå¼å¸¸==================="); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | } |