GenUtils.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package com.ruoyi.project.tool.gen.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.apache.velocity.VelocityContext;
  5. import com.ruoyi.common.constant.Constants;
  6. import com.ruoyi.common.constant.CommonMap;
  7. import com.ruoyi.common.utils.DateUtils;
  8. import com.ruoyi.common.utils.StringUtils;
  9. import com.ruoyi.framework.config.GenConfig;
  10. import com.ruoyi.project.tool.gen.domain.ColumnInfo;
  11. import com.ruoyi.project.tool.gen.domain.TableInfo;
  12. /**
  13. * 代码生成器 工具类
  14. *
  15. * @author ruoyi
  16. */
  17. public class GenUtils
  18. {
  19. /** 项目空间路径 */
  20. private static final String projectPath = "main/java/com/ruoyi/project";
  21. /** mybatis空间路径 */
  22. private static final String myBatisPath = "main/resources/mybatis";
  23. /** html空间路径 */
  24. private static final String templatesPath = "main/resources/templates";
  25. /**
  26. * 设置列信息
  27. */
  28. public static List<ColumnInfo> transColums(List<ColumnInfo> columns)
  29. {
  30. // 列信息
  31. List<ColumnInfo> columsList = new ArrayList<>();
  32. for (ColumnInfo column : columns)
  33. {
  34. // 列名转换成Java属性名
  35. String attrName = StringUtils.convertToCamelCase(column.getColumnName());
  36. column.setAttrName(attrName);
  37. column.setAttrname(StringUtils.uncapitalize(attrName));
  38. // 列的数据类型,转换成Java类型
  39. String attrType = CommonMap.javaTypeMap.get(column.getDataType());
  40. column.setAttrType(attrType);
  41. columsList.add(column);
  42. }
  43. return columsList;
  44. }
  45. /**
  46. * 获取模板信息
  47. *
  48. * @return 模板列表
  49. */
  50. public static VelocityContext getVelocityContext(TableInfo table)
  51. {
  52. // java对象数据传递到模板文件vm
  53. VelocityContext velocityContext = new VelocityContext();
  54. String packageName = GenConfig.getPackageName();
  55. velocityContext.put("tableName", table.getTableName());
  56. velocityContext.put("tableComment", replaceKeyword(table.getTableComment()));
  57. velocityContext.put("primaryKey", table.getPrimaryKey());
  58. velocityContext.put("className", table.getClassName());
  59. velocityContext.put("classname", table.getClassname());
  60. velocityContext.put("moduleName", GenUtils.getModuleName(packageName));
  61. velocityContext.put("columns", table.getColumns());
  62. velocityContext.put("package", packageName + "." + table.getClassname());
  63. velocityContext.put("author", GenConfig.getAuthor());
  64. velocityContext.put("datetime", DateUtils.getDate());
  65. return velocityContext;
  66. }
  67. /**
  68. * 获取模板信息
  69. *
  70. * @return 模板列表
  71. */
  72. public static List<String> getTemplates()
  73. {
  74. List<String> templates = new ArrayList<String>();
  75. templates.add("templates/vm/java/domain.java.vm");
  76. templates.add("templates/vm/java/Mapper.java.vm");
  77. templates.add("templates/vm/java/Service.java.vm");
  78. templates.add("templates/vm/java/ServiceImpl.java.vm");
  79. templates.add("templates/vm/java/Controller.java.vm");
  80. templates.add("templates/vm/xml/Mapper.xml.vm");
  81. templates.add("templates/vm/html/list.html.vm");
  82. templates.add("templates/vm/html/add.html.vm");
  83. templates.add("templates/vm/html/edit.html.vm");
  84. templates.add("templates/vm/sql/sql.vm");
  85. return templates;
  86. }
  87. /**
  88. * 表名转换成Java类名
  89. */
  90. public static String tableToJava(String tableName)
  91. {
  92. if (Constants.AUTO_REOMVE_PRE.equals(GenConfig.getAutoRemovePre()))
  93. {
  94. tableName = tableName.substring(tableName.indexOf("_") + 1);
  95. }
  96. if (StringUtils.isNotEmpty(GenConfig.getTablePrefix()))
  97. {
  98. tableName = tableName.replace(GenConfig.getTablePrefix(), "");
  99. }
  100. return StringUtils.convertToCamelCase(tableName);
  101. }
  102. /**
  103. * 获取文件名
  104. */
  105. public static String getFileName(String template, TableInfo table, String moduleName)
  106. {
  107. // 小写类名
  108. String classname = table.getClassname();
  109. // 大写类名
  110. String className = table.getClassName();
  111. String javaPath = projectPath + "/" + moduleName + "/";
  112. String mybatisPath = myBatisPath + "/" + moduleName + "/" + className;
  113. String htmlPath = templatesPath + "/" + moduleName + "/" + classname;
  114. if (StringUtils.isNotEmpty(classname))
  115. {
  116. javaPath += classname.replace(".", "/") + "/";
  117. }
  118. if (template.contains("domain.java.vm"))
  119. {
  120. return javaPath + "domain" + "/" + className + ".java";
  121. }
  122. if (template.contains("Mapper.java.vm"))
  123. {
  124. return javaPath + "mapper" + "/" + className + "Mapper.java";
  125. }
  126. if (template.contains("Service.java.vm"))
  127. {
  128. return javaPath + "service" + "/" + "I" + className + "Service.java";
  129. }
  130. if (template.contains("ServiceImpl.java.vm"))
  131. {
  132. return javaPath + "service" + "/" + className + "ServiceImpl.java";
  133. }
  134. if (template.contains("Controller.java.vm"))
  135. {
  136. return javaPath + "controller" + "/" + className + "Controller.java";
  137. }
  138. if (template.contains("Mapper.xml.vm"))
  139. {
  140. return mybatisPath + "Mapper.xml";
  141. }
  142. if (template.contains("list.html.vm"))
  143. {
  144. return htmlPath + "/" + classname + ".html";
  145. }
  146. if (template.contains("add.html.vm"))
  147. {
  148. return htmlPath + "/" + "add.html";
  149. }
  150. if (template.contains("edit.html.vm"))
  151. {
  152. return htmlPath + "/" + "edit.html";
  153. }
  154. if (template.contains("sql.vm"))
  155. {
  156. return classname + "Menu.sql";
  157. }
  158. return null;
  159. }
  160. /**
  161. * 获取模块名
  162. *
  163. * @param packageName 包名
  164. * @return 模块名
  165. */
  166. public static String getModuleName(String packageName)
  167. {
  168. int lastIndex = packageName.lastIndexOf(".");
  169. int nameLength = packageName.length();
  170. String moduleName = StringUtils.substring(packageName, lastIndex + 1, nameLength);
  171. return moduleName;
  172. }
  173. public static String replaceKeyword(String keyword)
  174. {
  175. String keyName = keyword.replaceAll("(?:表|信息)", "");
  176. return keyName;
  177. }
  178. public static void main(String[] args)
  179. {
  180. System.out.println(StringUtils.convertToCamelCase("user_name"));
  181. System.out.println(replaceKeyword("岗位信息表"));
  182. System.out.println(getModuleName("com.ruoyi.project.system"));
  183. }
  184. }