1
0

TableGenerator.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package com.izouma.codegenerator;
  2. import com.izouma.awesomeadmin.model.DataSourceInfo;
  3. import com.izouma.awesomeadmin.model.GenCode;
  4. import com.izouma.awesomeadmin.model.TableField;
  5. import com.izouma.awesomeadmin.util.Const;
  6. import com.izouma.awesomeadmin.util.JDBC;
  7. import com.izouma.awesomeadmin.util.PropertiesFileLoader;
  8. import org.apache.commons.lang.StringUtils;
  9. import java.sql.Connection;
  10. import java.sql.Statement;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. public class TableGenerator {
  14. public static void main(String[] args) throws Exception {
  15. //测试数据
  16. GenCode genCode = new GenCode();
  17. genCode.setTableName("ddddd");
  18. List<TableField> tableFields = new ArrayList<>();
  19. TableField tableFields1 = new TableField();
  20. tableFields1.setName("id");
  21. tableFields1.setJdbcType("int");
  22. tableFields1.setLength(11);
  23. tableFields1.setRemark("编号");
  24. tableFields1.setPrimaryKey(true);
  25. tableFields1.setAutoIncrease(true);
  26. tableFields1.setNotNull(true);
  27. TableField tableFields2 = new TableField();
  28. tableFields2.setName("username");
  29. tableFields2.setJdbcType("varchar");
  30. tableFields2.setLength(50);
  31. tableFields2.setRemark("用户名");
  32. tableFields2.setDefaultValue("s");
  33. tableFields2.setPrimaryKey(false);
  34. tableFields2.setAutoIncrease(false);
  35. tableFields2.setNotNull(true);
  36. tableFields.add(tableFields1);
  37. tableFields.add(tableFields2);
  38. genCode.setFields(tableFields);
  39. GenTable(genCode);
  40. }
  41. /**
  42. * 生成表,数据库建表
  43. *
  44. * @param model
  45. * @throws Exception
  46. */
  47. public static void GenTable(GenCode model) throws Exception {
  48. Connection conn = null;
  49. try {
  50. String DRIVER = "com.mysql.jdbc.Driver";
  51. PropertiesFileLoader propertiesFileLoader = PropertiesFileLoader.getInstance();
  52. //基础数据库
  53. String url = propertiesFileLoader.getProperties("properties/jdbc.properties", "jdbc.url");
  54. String user = propertiesFileLoader.getProperties("properties/jdbc.properties", "jdbc.username");
  55. String password = propertiesFileLoader.getProperties("properties/jdbc.properties", "jdbc.password");
  56. if (!"dataSource".equals(model.getDataSourceCode())) {//如果不是基础数据库
  57. //获取数据源配置信息
  58. DataSourceInfo dataSourceInfo = Const.DataSourceInfoMap.get(model.getDataSourceCode());
  59. if ("Mysql".equals(dataSourceInfo.getDatabaseType())) {
  60. url = "jdbc:mysql://" + dataSourceInfo.getUrl() + "/" + dataSourceInfo.getDatabaseName();
  61. user = dataSourceInfo.getUsername();
  62. password = dataSourceInfo.getPassword();
  63. } else if ("SqlServer".equals(dataSourceInfo.getDatabaseType())) {
  64. DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  65. url = "jdbc:sqlserver://" + dataSourceInfo.getUrl() + ";DatabaseName=" + dataSourceInfo.getDatabaseName();
  66. user = dataSourceInfo.getUsername();
  67. password = dataSourceInfo.getPassword();
  68. }
  69. }
  70. conn = JDBC.connectDB(DRIVER, url, user, password);
  71. Statement stmt = conn.createStatement();
  72. String sql = "DROP TABLE IF EXISTS " + model.getTableName() + "; create table " + model.getTableName() + "(";
  73. if ("SqlServer".equals(model.getDataBaseType())) {
  74. sql = "IF EXISTS (SELECT * FROM sys.objects where name = '" + model.getTableName() + "')DROP TABLE " + model.getTableName()
  75. + "; create table " + model.getTableName() + "(";
  76. }
  77. for (TableField tableField : model.getFields()) {
  78. if (tableField.getLength() == null) {
  79. switch (tableField.getJdbcType()) {
  80. case "int":
  81. tableField.setLength(10);
  82. break;
  83. case "char":
  84. tableField.setLength(1);
  85. break;
  86. case "varchar":
  87. tableField.setLength(255);
  88. break;
  89. default:
  90. tableField.setJavaType("String");
  91. }
  92. }
  93. if (tableField.getJdbcType().equals("decimal")) {
  94. if (tableField.getLength() == null) {
  95. tableField.setLength(10);
  96. }
  97. if (tableField.getDecimalPlaces() == null) {
  98. tableField.setDecimalPlaces(0);
  99. }
  100. }
  101. if (tableField.getLength() == null) {
  102. tableField.setLength(0);
  103. }
  104. if ("Mysql".equals(model.getDataBaseType())) {
  105. sql += " " + tableField.getName() + " " + tableField.getJdbcType() + "(" + tableField.getLength() + ")";
  106. } else if ("SqlServer".equals(model.getDataBaseType())) {
  107. if ("int".equals(tableField.getJdbcType())) {
  108. sql += " " + tableField.getName() + " " + tableField.getJdbcType();
  109. } else {
  110. sql += " " + tableField.getName() + " " + tableField.getJdbcType() + "(" + tableField.getLength() + ")";
  111. }
  112. }
  113. if (tableField.getNotNull()) {
  114. sql += " not null ";
  115. }
  116. if (tableField.getPrimaryKey()) {
  117. sql += " primary key ";
  118. }
  119. if (tableField.getAutoIncrease()) {
  120. if ("Mysql".equals(model.getDataBaseType())) {
  121. sql += " auto_increment ";
  122. } else if ("SqlServer".equals(model.getDataBaseType())) {
  123. sql += " identity(1,1) ";
  124. }
  125. }
  126. if (StringUtils.isNotEmpty(tableField.getDefaultValue())) {
  127. if ("CURRENT_TIMESTAMP".equals(tableField.getDefaultValue())) {
  128. sql += " default " + " " + tableField.getDefaultValue() + " ";
  129. if ("update_time".equals(tableField.getName())) {
  130. sql += " ON UPDATE CURRENT_TIMESTAMP ";
  131. }
  132. } else {
  133. sql += " default " + "'" + tableField.getDefaultValue() + "'";
  134. }
  135. }
  136. if (StringUtils.isNotEmpty(tableField.getRemark())) {
  137. if ("Mysql".equals(model.getDataBaseType())) {
  138. sql += " comment " + "'" + tableField.getRemark() + "'";
  139. }
  140. }
  141. sql += ",";
  142. }
  143. String str = sql.substring(0, sql.lastIndexOf(","));
  144. String sql1 = str + " )";
  145. if (StringUtils.isNotEmpty(model.getRemark())) {
  146. if ("Mysql".equals(model.getDataBaseType())) {
  147. sql1 += " comment = " + "'" + model.getRemark() + "'";
  148. }
  149. }
  150. System.out.println(sql1);
  151. int result = stmt.executeUpdate(sql1);
  152. if (result != -1) {
  153. System.out.println("创建数据表成功");
  154. }
  155. } catch (Exception e) {
  156. e.printStackTrace();
  157. } finally {
  158. conn.close();
  159. }
  160. }
  161. }