Răsfoiți Sursa

代码生成

x1ongzhu 6 ani în urmă
părinte
comite
9bb9592067

+ 11 - 1
src/main/java/com/izouma/awesomeadmin/model/GenCode.java

@@ -85,7 +85,7 @@ public class GenCode {
     private String dataBaseType;
 
     private List<TableField> fields;    // 表字段
-    private TableField primaryField; //主键字段
+    private TableField       primaryField; //主键字段
 
     private Boolean readTable;
 
@@ -107,6 +107,8 @@ public class GenCode {
 
     private List<Subtable> subtables;
 
+    private boolean update;
+
 
     public List<TableField> getFields() {
         return fields;
@@ -291,5 +293,13 @@ public class GenCode {
     public void setSubtables(List<Subtable> subtables) {
         this.subtables = subtables;
     }
+
+    public boolean getUpdate() {
+        return update;
+    }
+
+    public void setUpdate(boolean update) {
+        this.update = update;
+    }
 }
 

+ 7 - 9
src/main/java/com/izouma/awesomeadmin/web/GenCodeController.java

@@ -30,7 +30,7 @@ import org.springframework.web.context.ContextLoader;
  */
 @Controller
 @RequestMapping("/genCode")
-public class GenCodeController  {
+public class GenCodeController {
 
     @Autowired
     private GenCodeService genCodeService;
@@ -114,6 +114,7 @@ public class GenCodeController  {
     @ResponseBody
     public Result updateGenCode(@RequestBody GenCode record) {
         try {
+            record.setUpdate(true);
             Gson gson = new Gson();
             record.setGenJson(gson.toJson(record));
             genCode(record);
@@ -136,16 +137,13 @@ public class GenCodeController  {
             tableName = PinYinUtil.getStringPinYin(tableName);
         }
 
-        if (StringUtils.isNotEmpty(record.getClassName())) {
-
-            record.setClassName(CaseUtils.toCamelCase(record.getClassName(), true, '_'));
-        } else {
+        if (StringUtils.isEmpty(record.getClassName())) {
             record.setClassName(CaseUtils.toCamelCase(tableName, true, '_'));
         }
-
-//        if (record.getReadTable()) {
-//            ReadTableGenerator.ReadTable(record);
-//        }
+        if (Pattern.matches(".*[ _\\-].*", record.getClassName())) {
+            record.setClassName(CaseUtils.toCamelCase(tableName, true, '_', ' ', '-'));
+        }
+        record.setClassName(StringUtils.capitalize(record.getClassName()));
 
 
         GeneratorTool.getImports(record);

+ 8 - 22
src/main/java/com/izouma/codegenerator/ControllerGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,42 +13,27 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class ControllerGenerator {
+    private static final Logger LOGGER = Logger.getLogger(ControllerGenerator.class);
+
     public static void GenController(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
             context.put("model", model);
             Template t = Velocity.getTemplate("ControllerTemplate.vm");
 
-            String targetFile = model.getClassName() + "Controller.java";
-            File file = new File(model.getJavaPath() + "/web", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成Controller:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "web", model.getClassName() + "Controller.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成Controller:" + targetFile.toString());
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 89 - 9
src/main/java/com/izouma/codegenerator/EditViewGenerator.java

@@ -2,12 +2,34 @@ package com.izouma.codegenerator;
 
 import com.izouma.awesomeadmin.model.GenCode;
 import com.izouma.awesomeadmin.model.TableField;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.text.CaseUtils;
-
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.velocity.Template;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.context.Context;
+import org.hibernate.validator.internal.util.privilegedactions.GetResource;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class GeneratorTool {
+    public static void initVelocity() {
+        String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
+        Properties pro = new Properties();
+        pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
+        pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
+        Velocity.init(pro);
+    }
+
     public static List<String> getImports(GenCode model) {
         List<String> imports = new ArrayList<>();
         for (TableField field : model.getFields()) {
@@ -75,18 +97,17 @@ public class GeneratorTool {
         return jdbcType.toUpperCase();
     }
 
-    public static List removeDuplicated(List list) {
-        List newList = new ArrayList();
-        for (Object obj : list) {
-            if (!newList.contains(obj)) {
-                newList.add(obj);
+    public static List<String> removeDuplicated(List<String> list) {
+        List<String> newList = new ArrayList<>();
+        for (String s : list) {
+            if (!newList.contains(s)) {
+                newList.add(s);
             }
         }
         return newList;
     }
 
 
-
     public static String SqlServerJdbcType2Mysql(String jdbcType) {
 
         if (jdbcType.equalsIgnoreCase("int identity")) {
@@ -95,15 +116,74 @@ public class GeneratorTool {
             return "varchar";
         } else if (jdbcType.equalsIgnoreCase("ntext")) {
             return "text";
-        }else if (jdbcType.equalsIgnoreCase("nchar")) {
+        } else if (jdbcType.equalsIgnoreCase("nchar")) {
             return "char";
         }
         return jdbcType;
     }
 
-    public static void main(String[] args) {
+    public static void writeFile(Path path, Context context, Template template) {
+        Logger logger = Logger.getLogger(GeneratorTool.class);
+        try {
+            StringWriter stringWriter = new StringWriter();
+            template.merge(context, stringWriter);
+            writeFile(path, stringWriter.toString());
+        } catch (Exception e) {
+            logger.error(e);
+        }
+    }
 
+    public static void merge(Path path, Context context, Template template, boolean update) {
+        String oldContent = null;
+        StringWriter stringWriter = new StringWriter();
+        template.merge(context, stringWriter);
+        String newContent = stringWriter.toString();
+        try {
+            oldContent = new String(Files.readAllBytes(path));
+        } catch (Exception ignored) {
+        }
+        if (StringUtils.isEmpty(oldContent)) {
+            update = false;
+        }
+        if (!update) {
+            writeFile(path, newContent);
+        } else {
+            String merged = replaceGeneratedCode(oldContent, newContent);
+            writeFile(path, merged);
+        }
     }
 
+    public static void writeFile(Path path, String content) {
+        Logger logger = Logger.getLogger(GeneratorTool.class);
+        logger.log(Level.INFO, "writeFile: " + path);
+        try {
+            Files.createDirectories(path.getParent());
+            if (Files.notExists(path)) {
+                Files.createFile(path);
+            }
+            Files.write(path, content.getBytes());
+        } catch (Exception e) {
+            logger.error(e);
+        }
+    }
 
+    public static String replaceGeneratedCode(String src, String dst) {
+        String regex = "<!--generatedStart-->[\\s\\S]*?<!--generatedEnd-->";
+        Pattern pattern = Pattern.compile(regex);
+        Matcher srcMatcher = pattern.matcher(src);
+        Matcher dstMatcher = pattern.matcher(dst);
+        List<String> list = new ArrayList<>();
+        int lastIndex = 0;
+        while (srcMatcher.find() && dstMatcher.find()) {
+            list.add(src.substring(lastIndex, srcMatcher.start()));
+            list.add(dst.substring(dstMatcher.start(), dstMatcher.end()));
+            lastIndex = srcMatcher.end();
+        }
+        list.add(src.substring(lastIndex));
+        return StringUtils.join(list, "");
+    }
+
+    public static void main(String[] args) {
+
+    }
 }

+ 8 - 22
src/main/java/com/izouma/codegenerator/ListViewGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,19 +13,18 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class MapperGenerator {
+    private static final Logger LOGGER = Logger.getLogger(MapperGenerator.class);
+
     public static void GenMapper(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
@@ -37,23 +37,9 @@ public class MapperGenerator {
 //            }
 
             Template t = Velocity.getTemplate(templateName);
-
-            String targetFile = model.getClassName() + "Mapper.java";
-            File file = new File(model.getJavaPath() + "/dao", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成Mapper:" + file.getAbsolutePath());
+            Path targetFile = Paths.get(model.getJavaPath(), "dao", model.getClassName() + "Mapper.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成Mapper:" + targetFile.toString());
 
         } catch (Exception e) {
             e.printStackTrace();

+ 11 - 29
src/main/java/com/izouma/codegenerator/MapperXmlGenerator.java

@@ -2,28 +2,26 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
 import org.apache.velocity.tools.ToolManager;
 import org.hibernate.validator.internal.util.privilegedactions.GetResource;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class MapperXmlGenerator {
+    private static final Logger LOGGER = Logger.getLogger(MapperXmlGenerator.class);
+
     public static void GenXml(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
@@ -33,28 +31,12 @@ public class MapperXmlGenerator {
             if ("SqlServer".equals(model.getDataBaseType())) {
                 templateName = "MapperXmlSqlServerTemplate.vm";
             }
-
             Template t = Velocity.getTemplate(templateName);
-
-            String targetFile = model.getClassName() + "Mapper.xml";
-            File file = new File(model.getJavaPath() + "/dao", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成MapperXml:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "dao", model.getClassName() + "Mapper.xml").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成MapperXml:" + targetFile.toString());
         } catch (Exception e) {
-            e.printStackTrace();
+            LOGGER.error(e);
         }
     }
 }

+ 1 - 2
src/main/java/com/izouma/codegenerator/ModelGenerator.java

@@ -17,8 +17,7 @@ import java.util.*;
 public class ModelGenerator {
     public static void GenModel(GenCode model) {
         try {
-            List<String> imports = new ArrayList<>();
-            imports.addAll(GeneratorTool.getImports(model));
+            List<String> imports = new ArrayList<>(GeneratorTool.getImports(model));
             imports = GeneratorTool.removeDuplicated(imports);
 
             String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();

+ 8 - 22
src/main/java/com/izouma/codegenerator/ServiceGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,42 +13,27 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class ServiceGenerator {
+    private static final Logger LOGGER = Logger.getLogger(ServiceGenerator.class);
+
     public static void GenService(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
             context.put("model", model);
             Template t = Velocity.getTemplate("ServiceTemplate.vm");
 
-            String targetFile = model.getClassName() + "Service.java";
-            File file = new File(model.getJavaPath() + "/service", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成Service:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "service", model.getClassName() + "Service.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成Service:" + targetFile.toString());
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 8 - 22
src/main/java/com/izouma/codegenerator/ServiceImplGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,42 +13,27 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class ServiceImplGenerator {
+    private static final Logger LOGGER = Logger.getLogger(ServiceImplGenerator.class);
+
     public static void GemServicelImpl(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
             context.put("model", model);
             Template t = Velocity.getTemplate("ServiceImplTemplate.vm");
 
-            String targetFile = model.getClassName() + "ServiceImpl.java";
-            File file = new File(model.getJavaPath() + "/service/impl", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成ServiceImpl:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "service","impl", model.getClassName() + "ServiceImpl.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成ServiceImpl:" + targetFile.toString());
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 31 - 45
src/main/java/com/izouma/codegenerator/TableGenerator.java

@@ -54,9 +54,7 @@ public class TableGenerator {
     public static void GenTable(GenCode model) throws Exception {
         Connection conn = null;
         try {
-
             String DRIVER = "com.mysql.jdbc.Driver";
-
             PropertiesFileLoader propertiesFileLoader = PropertiesFileLoader.getInstance();
 
             //基础数据库
@@ -64,12 +62,9 @@ public class TableGenerator {
             String user = propertiesFileLoader.getProperties("properties/jdbc.properties", "jdbc.username");
             String password = propertiesFileLoader.getProperties("properties/jdbc.properties", "jdbc.password");
 
-
             if (!"dataSource".equals(model.getDataSourceCode())) {//如果不是基础数据库
-
                 //获取数据源配置信息
                 DataSourceInfo dataSourceInfo = Const.DataSourceInfoMap.get(model.getDataSourceCode());
-
                 if ("Mysql".equals(dataSourceInfo.getDatabaseType())) {
                     url = "jdbc:mysql://" + dataSourceInfo.getUrl() + "/" + dataSourceInfo.getDatabaseName();
                     user = dataSourceInfo.getUsername();
@@ -80,23 +75,22 @@ public class TableGenerator {
                     user = dataSourceInfo.getUsername();
                     password = dataSourceInfo.getPassword();
                 }
-
             }
 
-
             conn = JDBC.connectDB(DRIVER, url, user, password);
 
             Statement stmt = conn.createStatement();
 
-            String sql = "DROP TABLE IF EXISTS " + model.getTableName() + "; create table " + model.getTableName() + "(";
+            StringBuilder sql = new StringBuilder("create table " + model.getTableName() + "(");
 
             if ("SqlServer".equals(model.getDataBaseType())) {
-                sql = "IF EXISTS (SELECT * FROM sys.objects where name = '" + model.getTableName() + "')DROP TABLE " + model.getTableName()
-                        + "; create table " + model.getTableName() + "(";
+                sql = new StringBuilder("IF EXISTS (SELECT * FROM sys.objects where name = '" + model.getTableName() + "')DROP TABLE " + model.getTableName()
+                        + "; create table " + model.getTableName() + "(");
             }
 
-
+            List<String> fieldSqlList = new ArrayList<>();
             for (TableField tableField : model.getFields()) {
+                StringBuilder fieldSql = new StringBuilder();
                 if (tableField.getLength() == null) {
                     switch (tableField.getJdbcType()) {
                         case "int":
@@ -125,81 +119,73 @@ public class TableGenerator {
                     tableField.setLength(0);
                 }
 
-
                 if ("Mysql".equals(model.getDataBaseType())) {
-
-                    sql += " " + tableField.getName() + " " + tableField.getJdbcType() + "(" + tableField.getLength() + ")";
-
+                    fieldSql.append(" `").append(tableField.getName()).append("` ").append(tableField.getJdbcType()).append("(").append(tableField.getLength()).append(")");
                 } else if ("SqlServer".equals(model.getDataBaseType())) {
                     if ("int".equals(tableField.getJdbcType())) {
-
-                        sql += " " + tableField.getName() + " " + tableField.getJdbcType();
+                        fieldSql.append(" ").append(tableField.getName()).append(" ").append(tableField.getJdbcType());
                     } else {
-                        sql += " " + tableField.getName() + " " + tableField.getJdbcType() + "(" + tableField.getLength() + ")";
+                        fieldSql.append(" ").append(tableField.getName()).append(" ").append(tableField.getJdbcType()).append("(").append(tableField.getLength()).append(")");
                     }
-
                 }
 
-
                 if (tableField.getNotNull()) {
-                    sql += " not null ";
+                    fieldSql.append(" not null ");
                 }
                 if (tableField.getPrimaryKey()) {
-                    sql += " primary key ";
+                    fieldSql.append(" primary key ");
                 }
                 if (tableField.getAutoIncrease()) {
                     if ("Mysql".equals(model.getDataBaseType())) {
-
-                        sql += " auto_increment ";
-
+                        fieldSql.append(" auto_increment ");
                     } else if ("SqlServer".equals(model.getDataBaseType())) {
-                        sql += " identity(1,1) ";
+                        fieldSql.append(" identity(1,1) ");
                     }
-
+                }
+                if ("timestamp".equalsIgnoreCase(tableField.getJdbcType()) && StringUtils.isEmpty(tableField.getDefaultValue())) {
+                    tableField.setDefaultValue("null");
                 }
                 if (StringUtils.isNotEmpty(tableField.getDefaultValue())) {
                     if ("CURRENT_TIMESTAMP".equals(tableField.getDefaultValue())) {
-
-                        sql += " default " + " " + tableField.getDefaultValue() + " ";
-
+                        fieldSql.append(" default ").append(tableField.getDefaultValue()).append(" ");
                         if ("update_time".equals(tableField.getName())) {
-                            sql += " ON UPDATE CURRENT_TIMESTAMP ";
+                            fieldSql.append(" ON UPDATE CURRENT_TIMESTAMP ");
                         }
+                    } else if ("null".equalsIgnoreCase(tableField.getDefaultValue())) {
+                        fieldSql.append(" NULL ");
                     } else {
-                        sql += " default " + "'" + tableField.getDefaultValue() + "'";
+                        if ("bit".equalsIgnoreCase(tableField.getJdbcType())) {
+                            fieldSql.append(" default ").append(tableField.getDefaultValue());
+                        } else {
+                            fieldSql.append(" default '").append(tableField.getDefaultValue()).append("'");
+                        }
                     }
                 }
 
                 if (StringUtils.isNotEmpty(tableField.getRemark())) {
                     if ("Mysql".equals(model.getDataBaseType())) {
-                        sql += " comment " + "'" + tableField.getRemark() + "'";
+                        fieldSql.append(" comment '").append(tableField.getRemark()).append("'");
                     }
                 }
-
-                sql += ",";
+                fieldSqlList.add(fieldSql.toString());
             }
-            String str = sql.substring(0, sql.lastIndexOf(","));
-            String sql1 = str + " )";
-
+            sql.append(StringUtils.join(fieldSqlList, ",")).append(")");
             if (StringUtils.isNotEmpty(model.getRemark())) {
                 if ("Mysql".equals(model.getDataBaseType())) {
-                    sql1 += " comment = " + "'" + model.getRemark() + "'";
+                    sql.append(" comment = '").append(model.getRemark()).append("'");
                 }
             }
-
-            System.out.println(sql1);
-            int result = stmt.executeUpdate(sql1);
+            System.out.println(sql);
+            stmt.execute("DROP TABLE IF EXISTS " + model.getTableName());
+            int result = stmt.executeUpdate(sql.toString());
             if (result != -1) {
                 System.out.println("创建数据表成功");
             }
-
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
             conn.close();
         }
-
     }
-
 }