MybatisPlusGenCode.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package gencode;
  2. import org.apache.velocity.Template;
  3. import org.apache.velocity.VelocityContext;
  4. import org.apache.velocity.app.VelocityEngine;
  5. import java.io.*;
  6. import java.sql.*;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.Set;
  10. import java.util.stream.Collectors;
  11. public class MybatisPlusGenCode {
  12. //数据驱动
  13. final static String DRIVER_CLASS = "com.mysql.jdbc.Driver";
  14. //数据库名
  15. final static String DATABASE_NAME = "airport_industry_db";
  16. //数据连接地址
  17. final static String CONNECTION_URL = "jdbc:mysql://172.16.90.201:3306/" + DATABASE_NAME + "?characterEncoding=UTF-8";
  18. //数据库登录名
  19. final static String USER_ID = "root";
  20. //密码
  21. final static String PASS_WORD = "123456";
  22. //数据库表名
  23. final static String[] TABLE_NAMES = {
  24. "erp_channel_shop_material",
  25. "air_goods",};
  26. /**
  27. * 不能修改
  28. */
  29. //controller模版文件目录
  30. final static String CONTROLLER_DIR = "src/main/resources/vm/mybatisPlus/java/controller/ModelController.java.vm";
  31. //service 模版文件目录
  32. final static String SERVICE_DIR = "src/main/resources/vm/mybatisPlus/java/service/ModelSeevice.java.vm";
  33. //serviceImpl模版文件目录
  34. final static String SERVICEIMPL_DIR = "src/main/resources/vm/mybatisPlus/java/service/impl/ModelServiceImpl.java.vm";
  35. //entity 模板文件目录
  36. final static String ENTITY_DIR = "src/main/resources/vm/mybatisPlus/java/entity/ModelEntity.java.vm";
  37. final static String MAPPER_JAVA_DIR = "src/main/resources/vm/mybatisPlus/java/mapper/ModelMapper.java.vm";
  38. final static String MAPPER_XML_DIR = "src/main/resources/vm/mybatisPlus/java/mapper/ModelMapper.xml.vm";
  39. //项目目录
  40. final static String BASE_PACKAGE = "com.hw";
  41. final static String BASE_PACKAGE_PATH = "src.main.java";
  42. //基础目录(不允许修改)
  43. final static String BASE_PACKAGE_NAME = BASE_PACKAGE_PATH + "." + BASE_PACKAGE;
  44. public static void main(String[] args) throws Exception {
  45. productionJavaFiles();
  46. }
  47. public static List<ColumnVo> getIdType(String tableName) {
  48. List<ColumnVo> columnVos = new ArrayList<>();
  49. try {
  50. //1、注册JDBC驱动
  51. Class.forName(DRIVER_CLASS);
  52. //2、获取数据库连接
  53. Connection connection = DriverManager.getConnection(CONNECTION_URL, USER_ID, PASS_WORD);
  54. //3、操作数据库
  55. Statement statement = connection.createStatement();//获取操作数据库的对象
  56. String sql = "SELECT COLUMN_NAME,IS_NULLABLE,COLUMN_COMMENT,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_KEY " +
  57. "FROM information_schema. COLUMNS WHERE table_schema = '" + DATABASE_NAME + "' AND table_name = '" + tableName + "'";
  58. ResultSet resultSet = statement.executeQuery(sql);//执行sql,获取结果集
  59. System.out.println("sql:" + sql);
  60. while (resultSet.next()) { //遍历结果集,取出数据
  61. //输出数据
  62. String key = resultSet.getString("COLUMN_KEY");
  63. String column_name = resultSet.getString("COLUMN_NAME");
  64. System.out.println("主键名称:" + column_name);
  65. String data_type = resultSet.getString("DATA_TYPE");
  66. String column_comment = resultSet.getString("COLUMN_COMMENT");
  67. String IS_NULLABLE = resultSet.getString("IS_NULLABLE");
  68. System.out.println("主键类型:" + data_type);
  69. MysqlDataType enumType = MysqlDataType.getEnumType(data_type);
  70. if (enumType != MysqlDataType.ERROR) {
  71. ColumnVo columnVo = new ColumnVo(column_name, enumType.getValue(), enumType.getJavaPackage());
  72. columnVo.setAttribute(DataUtil.toCase(column_name));
  73. columnVo.setAttributeUp(DataUtil.toUp(columnVo.getAttribute()));
  74. columnVo.setRemake(column_comment + " 必填:" + IS_NULLABLE);
  75. if("PRI".equals(key)){
  76. columnVo.setKeyFlag(true);
  77. }else{
  78. columnVo.setKeyFlag(false);
  79. }
  80. columnVos.add(columnVo);
  81. }
  82. }
  83. //4、关闭结果集、数据库操作对象、数据库连接
  84. resultSet.close();
  85. statement.close();
  86. connection.close();
  87. } catch (Exception e) {
  88. e.printStackTrace();
  89. throw new RuntimeException("数据库连接错误!");
  90. }
  91. return columnVos;
  92. }
  93. private static void productionJavaFiles() throws Exception {
  94. for (String tableName : TABLE_NAMES) {
  95. VelocityEngine ve = new VelocityEngine();
  96. ve.init();
  97. VelocityContext ctx = new VelocityContext();
  98. ctx.put("tableName", tableName);
  99. //获取列数据
  100. List<ColumnVo> mysqlDataType = getIdType(tableName);
  101. for (ColumnVo columnVo : mysqlDataType) {
  102. boolean keyFlag = columnVo.isKeyFlag();
  103. if(keyFlag){
  104. ctx.put("keyPackage", columnVo.getJavaPackage());
  105. ctx.put("keyValue", columnVo.getValue());
  106. break;
  107. }
  108. }
  109. if (mysqlDataType.size() > 0) {
  110. Set<String> collect = mysqlDataType.stream().map(ColumnVo::getJavaPackage).collect(Collectors.toSet());
  111. ctx.put("columns", mysqlDataType);
  112. ctx.put("javaPackages", collect);
  113. tableName = DataUtil.toCase(tableName);
  114. ctx.put("entity", tableName);
  115. String tableNameNew = DataUtil.toUp(tableName);
  116. ctx.put("Entity", tableNameNew);
  117. saveEntity(ve, ctx, tableNameNew);
  118. saveMapper(ve, ctx, tableNameNew);
  119. saveMapperXml(ve, ctx, tableNameNew);
  120. saveService(ve, ctx, tableNameNew);
  121. saveServiceImpl(ve, ctx, tableNameNew);
  122. saveController(ve, ctx, tableNameNew);
  123. }
  124. }
  125. }
  126. private static void saveEntity(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
  127. createModel(ve, ctx, entityName, "domian", ENTITY_DIR, ".java", "ENTITY_PACKAGE_NAME");
  128. }
  129. private static void saveMapper(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
  130. createModel(ve, ctx, entityName, "mapper", MAPPER_JAVA_DIR, "Mapper.java", "MAPPER_PACKAGE_NAME");
  131. }
  132. private static void saveMapperXml(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
  133. createModel(ve, ctx, entityName, "mapper", MAPPER_XML_DIR, "Mapper.xml", "MAPPER_PACKAGE_NAME");
  134. }
  135. private static void saveService(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
  136. createModel(ve, ctx, entityName, "service", SERVICE_DIR, "Service.java", "service_package_name");
  137. }
  138. private static void saveServiceImpl(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
  139. createModel(ve, ctx, entityName, "service", SERVICEIMPL_DIR, "ServiceImpl.java", "service_impl_package_name");
  140. }
  141. private static void saveController(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
  142. createModel(ve, ctx, entityName, "controller", CONTROLLER_DIR, "Controller.java", "controller_package_name");
  143. }
  144. private static void createModel(VelocityEngine ve, VelocityContext ctx, String entityName, String controller, String controllerDir, String s2, String controller_package_name) throws IOException {
  145. String BaseName = controller;
  146. Template t = ve.getTemplate(controllerDir);
  147. //创建文件
  148. String substring = entityName + s2;
  149. //输出文件
  150. String replace = BASE_PACKAGE_NAME.replace('.', '/') + "/" + BaseName + "/";
  151. String s = replace + substring;
  152. String str = replace.replace('/', '.') + substring;
  153. String ENTITY_PACKAGE_NAME = str.replace(BASE_PACKAGE_PATH + ".", "");
  154. String PACKAGE = BASE_PACKAGE + "." + BaseName;
  155. ctx.put(controller_package_name, PACKAGE);
  156. File controllerFile = new File(s);
  157. saveFile(t, ctx, replace, controllerFile);
  158. }
  159. private static void saveFile(Template t, VelocityContext ctx, String filePath, File saveFile) throws IOException {
  160. File path = new File(filePath);
  161. //文件,如果不存在,就创建
  162. if (!path.exists() && !path.isDirectory()) {
  163. System.out.println("//不存在");
  164. path.mkdirs();
  165. } else {
  166. System.out.println("//目录存在");
  167. }
  168. //创建文件输出流
  169. FileOutputStream outStream = new FileOutputStream(saveFile);
  170. //因为模板整合的时候,需要提供一个Writer,所以创建一个Writer
  171. OutputStreamWriter writer = new OutputStreamWriter(outStream);
  172. //创建一个缓冲流
  173. BufferedWriter bufferWriter = new BufferedWriter(writer);
  174. //5 Merge the template and you data toproduce the output
  175. t.merge(ctx, bufferWriter);
  176. bufferWriter.flush();//强制刷新
  177. outStream.close();
  178. bufferWriter.close();
  179. }
  180. }