wutianbin 7 жил өмнө
commit
3508a3eaad
22 өөрчлөгдсөн 2158 нэмэгдсэн , 0 устгасан
  1. 12 0
      .gitignore
  2. 32 0
      pom.xml
  3. 20 0
      src/main/java/org/geek/szbay/assistant/AssistantRunner.java
  4. 150 0
      src/main/java/org/geek/szbay/assistant/bigdata/BigDataBuilder.java
  5. 334 0
      src/main/java/org/geek/szbay/assistant/code/CodeHelpper.java
  6. 142 0
      src/main/java/org/geek/szbay/assistant/code/generator/ControllerMaker.java
  7. 130 0
      src/main/java/org/geek/szbay/assistant/code/generator/DaoMysqlMaker.java
  8. 185 0
      src/main/java/org/geek/szbay/assistant/code/generator/EntityMysqlMaker.java
  9. 324 0
      src/main/java/org/geek/szbay/assistant/code/generator/MapperXmlMaker.java
  10. 121 0
      src/main/java/org/geek/szbay/assistant/code/generator/ReadMapperMaker.java
  11. 57 0
      src/main/java/org/geek/szbay/assistant/code/generator/ReaderMysqlMaker.java
  12. 65 0
      src/main/java/org/geek/szbay/assistant/code/generator/ServiceImplMysqlMaker.java
  13. 49 0
      src/main/java/org/geek/szbay/assistant/code/generator/ServiceMysqlMaker.java
  14. 195 0
      src/main/java/org/geek/szbay/assistant/code/generator/WriteMapperMaker.java
  15. 51 0
      src/main/java/org/geek/szbay/assistant/code/generator/WriterMysqlMaker.java
  16. 30 0
      src/main/java/org/geek/szbay/assistant/code/generator/helpper/BeanHelpper.java
  17. 17 0
      src/main/java/org/geek/szbay/assistant/code/generator/helpper/MakeHelpper.java
  18. 101 0
      src/main/java/org/geek/szbay/assistant/code/generator/helpper/TableHelpper.java
  19. 25 0
      src/main/java/org/geek/szbay/assistant/utils/CharUtils.java
  20. 68 0
      src/main/java/org/geek/szbay/assistant/utils/DateUtils.java
  21. 18 0
      src/main/java/org/geek/szbay/assistant/utils/RandomStrCreater.java
  22. 32 0
      src/main/java/org/geek/szbay/assistant/utils/StringUtils.java

+ 12 - 0
.gitignore

@@ -0,0 +1,12 @@
+*.class
+.idea/
+*.iml
+*.log
+/target
+target/
+test-output/
+bin/
+.project
+.settings
+.classpath
+*.log

+ 32 - 0
pom.xml

@@ -0,0 +1,32 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.geek.szbay</groupId>
+	<artifactId>code-tool</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+
+	<repositories>
+		<repository>
+			<id>aliyun-nexus</id>
+			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+		</repository>
+	</repositories>
+	
+	<dependencies>
+		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>6.0.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<optional>true</optional>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+</project>

+ 20 - 0
src/main/java/org/geek/szbay/assistant/AssistantRunner.java

@@ -0,0 +1,20 @@
+package org.geek.szbay.assistant;
+
+import org.geek.szbay.assistant.code.CodeHelpper;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:24:44
+ * @version 1.0
+ */
+public class AssistantRunner {
+
+    public static void main(String[] args) {  
+    	
+    	// 生成的文件固定输出到   d:\temp\generate-code 目录下
+    	
+    	CodeHelpper codeHelpper = new CodeHelpper();
+        codeHelpper.generate();
+    }
+    
+}

+ 150 - 0
src/main/java/org/geek/szbay/assistant/bigdata/BigDataBuilder.java

@@ -0,0 +1,150 @@
+package org.geek.szbay.assistant.bigdata;
+
+import java.sql.Connection;
+import java.util.Date;
+
+import java.sql.DriverManager;
+import java.sql.Statement;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月30日 上午8:58:56
+ * @version 1.0
+ */
+public class BigDataBuilder {
+    private static final String DB_URL ="jdbc:mysql://123.56.3.131/wutb?useEncodingUnicode=true&amp;zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf-8&amp;useOldAliasMetadataBehavior=true&amp;allowMultiQueries=true";  
+    private static final String DB_NAME = "root";  
+    private static final String DB_PASS = "Hjlytour2017";  
+    private static final String DB_DRIVER ="com.mysql.jdbc.Driver";
+    @SuppressWarnings("unused")
+    private static final String DB_SCHEMA = "wutb";
+
+    private Connection initDB() {
+        // 连接数据库
+        
+        // 创建连接  
+        Connection con = null;  
+
+        try {  
+            Class.forName(DB_DRIVER);  
+            con = DriverManager.getConnection(DB_URL,DB_NAME,DB_PASS);
+        } catch (Exception e) {  
+            e.printStackTrace();  
+        }
+        
+        return con;
+    }
+
+    public void generate(int totalNumber, int perNumber, int beginId) {
+        Connection con = initDB();
+        if (con == null) {
+            System.out.println("Connection is null.");
+            return ;
+        }
+        
+        long total_msec_insert = 0;
+        long total_msec_update = 0;
+        
+        long per_msec_insert = 0;
+        long per_msec_update = 0;
+        
+        long insert_msec = 0;
+        long update_msec = 0;
+
+        System.out.println("begin...");
+        for(int i = 0; i < totalNumber; i++) {
+            int num = i + 1;
+            insert_msec = insertIntoOrder(con, beginId + num);
+            update_msec = updateIntoOrder(con, beginId + num);
+            total_msec_insert = total_msec_insert + insert_msec;
+            total_msec_update = total_msec_update + update_msec;
+            
+            per_msec_insert = per_msec_insert + insert_msec;
+            per_msec_update = per_msec_update + update_msec;
+
+            if (num % perNumber == 0) {
+                insertIntoCalc(con, num, total_msec_insert, total_msec_update, 
+                        per_msec_insert, per_msec_update, 
+                        total_msec_insert/num, total_msec_update/num,
+                        per_msec_insert/perNumber, per_msec_update/perNumber);
+                per_msec_insert = 0;
+                per_msec_update = 0;
+            }
+        }
+        System.out.println("");
+        System.out.println("end.");
+    }
+ 
+    private long updateIntoOrder(Connection con, Integer id) {    
+        String sql = "UPDATE `wutb`.`pay_order` SET `pay_no` = ?, `qrcode` = ? "
+                + " WHERE `id` = ? ";
+        java.sql.PreparedStatement updateStat = null;  
+        try {
+            updateStat = con.prepareStatement(sql);
+            updateStat.setString(1, "pay_order value");
+            updateStat.setString(2, "qrcode value");
+            updateStat.setInt(3, id);
+            updateStat.executeUpdate();
+            long msec = (new Date()).getTime(); 
+            updateStat.executeUpdate();
+            return (new Date()).getTime() - msec;
+        } catch (Exception e) {  
+            System.out.println(sql);
+            e.printStackTrace();  
+        }
+        return 0;
+    }
+
+    private long insertIntoOrder(Connection con, Integer id) {    
+        String sql = "INSERT INTO `wutb`.`pay_order` (`merchant_id`, `app_identity`, `order_no`, `client_ip`) "
+                + "VALUES(?, ?, ?, ?)";
+        java.sql.PreparedStatement updateStat = null;  
+        try {
+            updateStat = con.prepareStatement(sql);
+            updateStat.setInt(1, id);
+            updateStat.setString(2, "app_identity");
+            updateStat.setInt(3, id);
+            updateStat.setString(4, "127.0.0.1");
+            updateStat.executeUpdate();
+            long msec = (new Date()).getTime(); 
+            updateStat.executeUpdate();
+            return (new Date()).getTime() - msec;
+        } catch (Exception e) {  
+            System.out.println(sql);
+            e.printStackTrace();  
+        }
+        return 0;
+    }
+    
+    private long insertIntoCalc(Connection con, Integer num, 
+            Long total_msec_insert, Long total_msec_update, 
+            Long per_msec_insert, Long per_msec_update, 
+            Long total_avg_insert, Long total_avg_update, 
+            Long per_avg_insert, Long per_avg_update) {    
+        String sql = "INSERT INTO `wutb`.`calc_rec`"
+                + "(`rec_number`,`insert_msec_total`,`update_msec_total`,`insert_msec`,`update_msec`,"
+                + "`insert_avg_total`,`update_avg_total`,`insert_avg`,`update_avg`)"
+                + "VALUES(%d,%d,%d,%d,%d,"
+                + "%d,%d,%d,%d)";
+        sql = String.format(sql, num, total_msec_insert, total_msec_update, per_msec_insert, per_msec_update, 
+                total_avg_insert, total_avg_update, per_avg_insert, per_avg_update);
+
+        System.out.print(".");
+        
+        Statement stat = null;  
+        try {
+            stat = con.createStatement();
+            stat.execute(sql);
+        } catch (Exception e) {  
+            System.out.println(sql);
+            e.printStackTrace();  
+        }
+        return 0;
+    }
+
+    public static void main(String[] args) {
+        BigDataBuilder builder = new BigDataBuilder();
+        builder.generate(1000, 100, 8003000);
+        //builder.generate(20000000, 100000);
+    }
+}

+ 334 - 0
src/main/java/org/geek/szbay/assistant/code/CodeHelpper.java

@@ -0,0 +1,334 @@
+package org.geek.szbay.assistant.code;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.geek.szbay.assistant.code.generator.ControllerMaker;
+import org.geek.szbay.assistant.code.generator.DaoMysqlMaker;
+import org.geek.szbay.assistant.code.generator.EntityMysqlMaker;
+import org.geek.szbay.assistant.code.generator.MapperXmlMaker;
+import org.geek.szbay.assistant.code.generator.ServiceImplMysqlMaker;
+import org.geek.szbay.assistant.code.generator.ServiceMysqlMaker;
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:29:10
+ * @version 1.0
+ */
+public class CodeHelpper {
+    //private static final String DB_URL ="jdbc:mysql://127.0.0.1/demo?useEncodingUnicode=true&amp;zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf-8&amp;useOldAliasMetadataBehavior=true&amp;allowMultiQueries=true";  
+	private static final String DB_URL ="jdbc:mysql://127.0.0.1/demo?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull";
+    private static final String DB_NAME = "root";  
+    private static final String DB_PASS = "admin";  
+    private static final String DB_DRIVER ="com.mysql.jdbc.Driver";
+    private static final String DB_SCHEMA = "demo";
+
+    /** 作者名字 */
+    private String authorName = "wutianbin";
+    
+    /** 表的前导字符 */
+    //private String preTableName = "*";
+    private String preTableName = "fp\\_exam";
+    
+    /** 指定实体生成所在包的路径 */
+    private String entityOutPath = "com.donghaiair.flyprepare.admin.domain";
+
+    /** 指定Dao生成所在包的路径 */
+    private String daoOutPath = "com.donghaiair.flyprepare.admin.dao";
+
+    /** 指定Service生成所在包的路径 */
+    private String serviceOutPath = "com.donghaiair.flyprepare.admin.service";
+
+    /** 指定controller生成所在包的路径 */
+    private String controllerOutPath = "com.donghaiair.flyprepare.admin.controller";
+    
+    /** dto所在的目录根路径 */
+    private String dtoRootPath = "com.donghaiair.flyprepare.admin.dto";
+
+    /** 指定Mapper生成所在包的路径 */
+    private String mapperOutPath = "mappers";
+
+    public void generate() {
+        Connection con = initDB();
+        if (con == null) {
+            System.out.println("Connection is null.");
+            return ;
+        }
+        
+        Map<String, String> tableList = getTableList(con, preTableName);
+        if (tableList == null || tableList.size() <= 0) {
+            System.out.println("tableList is null.");
+            return ;
+        }
+        
+        String key = "";
+
+        List<String> colNames = new ArrayList<String>();     // 列名  
+        List<String> attrNames = new ArrayList<String>();    // 属性名
+        List<String> colTypes = new ArrayList<String>();     // 列名类型  
+        List<String> colComments = new ArrayList<String>();  // 列名注释 Attr 
+        
+        for(String tableName : tableList.keySet()) {
+        	String tableComment = tableList.get(tableName);
+        	
+            key = getTableColumns(con, tableName, attrNames, colNames, colTypes, colComments);
+            if (key == null || key.trim().isEmpty()) {
+            	System.out.println(tableName + " not key!!!!!!!!!!");
+            	continue;
+            } 
+            
+            generateEntity(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+
+            // 不做读写分离的dao
+            generateDao(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+            
+            // 不做读写分离的Mapper
+            generateMapper(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+            
+            generateService(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+            generateServiceImpl(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+
+            generateController(tableName, tableComment, key, attrNames, colNames, colTypes, colComments);
+        }
+    }
+    
+	private Connection initDB() {
+        // 连接数据库
+        
+        // 创建连接  
+        Connection con = null;  
+
+        try {  
+            Class.forName(DB_DRIVER);  
+            con = DriverManager.getConnection(DB_URL,DB_NAME,DB_PASS);
+        } catch (Exception e) {  
+            e.printStackTrace();  
+        }
+        
+        return con;
+    }
+    
+    private Map<String, String> getTableList(Connection con, String preTableName) {
+        String sql = "SELECT table_name, table_comment FROM information_schema.tables "
+                + " WHERE table_schema = '" + DB_SCHEMA + "'" 
+        		+ " AND table_type = 'BASE TABLE'";  
+        // 查要生成实体类的表  
+    	if (null == preTableName || preTableName.isEmpty() || preTableName.trim().equals("*")) {
+    	}
+    	else {
+    		sql = sql + " AND table_name LIKE '" + preTableName + "%'";
+    	}
+                  
+        Map<String, String> ret = new HashMap<String, String>();
+        
+        try {
+            Statement stat = con.createStatement();
+            ResultSet rs = stat.executeQuery(sql);
+    
+            while (rs.next()) {
+                String value = rs.getString(1);
+                String comment = rs.getString(2);
+                ret.put(value, comment);
+            }
+        } catch (Exception e) {  
+            e.printStackTrace();  
+        }
+        
+        return ret;
+    }
+
+    private String getTableColumns(Connection con, String tableName, List<String> attrNames, List<String> colNames, 
+            List<String> colTypes, List<String> colComments) {
+        attrNames.clear();
+        colNames.clear();
+        colTypes.clear(); 
+        colComments.clear();
+        
+        String sql = "SELECT COLUMN_NAME, COLUMN_COMMENT, COLUMN_KEY, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS "
+                + " WHERE table_schema = '" + DB_SCHEMA + "'" 
+                + " AND table_name = '" + tableName + "'";
+
+        String key = "";
+        
+        Statement stat = null;  
+        try {
+            stat = con.createStatement();
+            ResultSet rs = stat.executeQuery(sql);
+    
+            while (rs.next()) {
+                String colName = rs.getString(1);
+                String colComment = rs.getString(2);
+                String colType = rs.getString(4);
+                
+                String pk = rs.getString(3);
+                if ("PRI".equals(pk)) {
+                    key = colName;    
+                }
+                
+                attrNames.add(TableHelpper.columnNameToAttrName(colName));
+                colNames.add(colName);
+                colTypes.add(TableHelpper.sqlTypeToJavaType(colType));
+                
+                if (colComment == null || colComment.trim().equals("")) {
+                    colComment = colName;
+                }
+                
+                colComments.add(colComment);
+            }
+        } catch (Exception e) {  
+            e.printStackTrace();  
+        }
+
+        return key;
+    }
+    
+    private void saveToFile(String tableName, String packageOutPath, String content, String fileName) {
+        try {  
+//            File directory = new File("");  
+            String path = this.getClass().getResource("").getPath();  
+              
+            System.out.println(path);  
+            System.out.println("src/?/" + path.substring(path.lastIndexOf("/org/", path.length())));  
+            // 固定输出到 d:\temp\generate-code 下
+            String outputPath = "d:/temp/generate-code/" + packageOutPath.replace(".", "/") + "/" + fileName;
+//            String outputPath = directory.getAbsolutePath() + "/src/" + packageOutPath.replace(".", "/") + "/" + fileName;
+
+            forceMakeDirs(outputPath);
+            
+            FileWriter fw = new FileWriter(outputPath);  
+            PrintWriter pw = new PrintWriter(fw);  
+            try {
+                pw.println(content);  
+                pw.flush();  
+            } finally {
+                pw.close();
+            }
+        } catch (IOException e) {  
+            e.printStackTrace();  
+        }  
+    }
+    
+    private void forceMakeDirs(String fileName) {
+        File file = new File(fileName);
+        File parentFile = file.getParentFile();
+        
+        if (!parentFile.exists()) {
+            boolean result = parentFile.mkdirs();
+            if (!result) {
+                System.out.println("路径创建失败:" + fileName);
+            }
+        }
+    }
+    
+    private void generateEntity(String tableName, String tableComment, 
+    		String key, List<String> attrNames, List<String> colNames,
+            List<String> colTypes, List<String> colComments) {
+        String className = TableHelpper.tableNameToClassName(tableName) + "DO";
+        String content = EntityMysqlMaker.parse(authorName, className, 
+        		tableName, tableComment, key, entityOutPath, 
+                attrNames, colNames, colTypes, colComments);
+        saveToFile(tableName, entityOutPath, content, className + ".java");
+    }
+    
+    private void generateDao(String tableName, String tableComment, 
+    		String key, List<String> attrNames, List<String> colNames,
+            List<String> colTypes, List<String> colComments) {
+        String tname = TableHelpper.tableNameToClassName(tableName); 
+        String className = tname + "Dao";
+        String entityFullClassName = entityOutPath + "." + tname + "DO"; 
+        String content = DaoMysqlMaker.parse(authorName, className, 
+        		tableName, tableComment, key, daoOutPath, 
+                entityFullClassName, tname + "DO", 
+                attrNames, colNames, colTypes, colComments);
+        saveToFile(tableName, daoOutPath, content, className + ".java");
+    }
+
+    private void generateService(String tableName, String tableComment, 
+    		String key, List<String> attrNames, List<String> colNames,
+            List<String> colTypes, List<String> colComments) {
+        String tname = TableHelpper.tableNameToClassName(tableName); 
+        String className = tname + "Service";
+        String entityFullClassName = entityOutPath + "." + tname + "DO"; 
+        String content = ServiceMysqlMaker.parse(authorName, className, 
+        		tableName, tableComment, key, serviceOutPath, 
+                entityFullClassName, tname + "DO", 
+                attrNames, colNames, colTypes, colComments);
+        saveToFile(tableName, serviceOutPath, content, className + ".java");
+    }
+
+    private void generateServiceImpl(String tableName, String tableComment, 
+    		String key, List<String> attrNames, List<String> colNames,
+            List<String> colTypes, List<String> colComments) {
+        String tname = TableHelpper.tableNameToClassName(tableName); 
+        String className = tname + "ServiceImpl";
+
+        String entityClassName = tname + "DO";
+        String entityFullClassName = entityOutPath + "." + entityClassName;
+        
+        String daoClassName = tname + "Dao";
+        String daoFullClassName = daoOutPath + "." + daoClassName;
+
+        String serviceClassName = tname + "Service";
+        String serviceFullClassName = serviceOutPath + "." + serviceClassName;
+
+        String content = ServiceImplMysqlMaker.parse(authorName, className, tableName, 
+        		tableComment, key, serviceOutPath + ".impl", 
+                entityFullClassName, entityClassName,
+                daoFullClassName, daoClassName,
+                serviceFullClassName, serviceClassName, 
+                attrNames, colNames, colTypes, colComments);
+        saveToFile(tableName, serviceOutPath + ".impl", content, className + ".java");
+    }
+
+    private void generateMapper(String tableName, String tableComment, 
+    		String key, List<String> attrNames, List<String> colNames,
+            List<String> colTypes, List<String> colComments) {
+        String tname = TableHelpper.tableNameToClassName(tableName); 
+
+        String entityClassName = tname + "DO";
+        String entityFullClassName = entityOutPath + "." + entityClassName;
+        
+        String daoClassName = tname + "Dao";
+        String daoFullClassName = daoOutPath + "." + daoClassName;
+
+        String fileName = tname + "Mapper";
+
+        String content = MapperXmlMaker.parse(authorName, tableName, tableComment, key, mapperOutPath, 
+                entityFullClassName, entityClassName,
+                daoFullClassName, daoClassName,
+                attrNames, colNames, colTypes, colComments);
+
+        saveToFile(tableName, mapperOutPath, content, fileName + ".xml");
+    }
+
+    private void generateController(String tableName, String tableComment, 
+    		String key, List<String> attrNames, List<String> colNames,
+			List<String> colTypes, List<String> colComments) {
+        String tname = TableHelpper.tableNameToClassName(tableName); 
+        String className = tname + "Controller";
+        
+        String entityClassName = tname + "DO"; 
+        String entityFullClassName = entityOutPath + "." + entityClassName; 
+        
+        String serviceClassName = tname + "Service"; 
+        String serviceFullClassName = serviceOutPath + "." + serviceClassName; 
+
+        String content = ControllerMaker.parse(authorName, className, 
+        		tableName, tableComment, key, controllerOutPath, 
+                entityFullClassName, entityClassName, serviceFullClassName, serviceClassName,
+                dtoRootPath, attrNames, colNames, colTypes, colComments);
+        saveToFile(tableName, controllerOutPath, content, className + ".java");
+	}
+
+}

+ 142 - 0
src/main/java/org/geek/szbay/assistant/code/generator/ControllerMaker.java

@@ -0,0 +1,142 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class ControllerMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String tableComment, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            String serviceFullClassName, String serviceClassName,
+            String dtoRootPath, List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + outPath + ";\r\n");  
+        sb.append("\r\n");  
+        
+        sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n");
+        sb.append("import org.springframework.stereotype.Controller;\r\n");
+        sb.append("import org.springframework.ui.Model;\r\n");
+        sb.append("import org.springframework.web.bind.annotation.RequestMapping;\r\n");
+        sb.append("import org.springframework.web.bind.annotation.ResponseBody;\r\n");
+        sb.append("\r\n");  
+
+        sb.append("import " + entityFullClassName + ";\r\n");
+        sb.append("import " + dtoRootPath + ".Page;\r\n");
+        sb.append("import " + dtoRootPath + ".RetResult;\r\n");
+        sb.append("import " + serviceFullClassName + ";\r\n");
+        sb.append("\r\n");  
+
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableComment + "(" + tableName + ") 的后台维护控制类", authorName));
+        
+        //实体部分  
+        sb.append("@Controller\r\n");
+        sb.append("public class ").append(className)
+        	.append(" extends BaseController<").append(entityClassName).append("> {\r\n");
+        sb.append("\r\n");
+        
+        String serviceObject = StringUtils.firstToLowerCase(serviceClassName);
+ 
+        sb.append("    @Autowired\r\n");
+        sb.append("    private ").append(serviceClassName).append(" ").append(serviceObject).append(";\r\n");
+        sb.append("\r\n");
+        
+        String tname = TableHelpper.tableNameToClassName(tableName);
+        String tableUrl = "/" + StringUtils.firstToLowerCase(tname) + "/";
+        
+    	sb.append("    @RequestMapping(\"").append(tableUrl).append("save\")\r\n");
+    	sb.append("    @Override\r\n");
+    	sb.append("    public RetResult<Integer> save(").append(entityClassName).append(" t) {\r\n");
+    	sb.append("        return super.save(t);\r\n");
+    	sb.append("    }\r\n");
+        sb.append("\r\n");
+        
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("savePage\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public String savePage(").append(entityClassName).append(" t, Model model) {\r\n");
+        sb.append("        return super.savePage(t, model);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("delete\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public RetResult<Integer> delete(String key) {\r\n");
+        sb.append("        return super.delete(key);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+        
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("deletePage\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public String deletePage(String key, Model model) {\r\n");
+        sb.append("        return super.deletePage(key, model);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("update\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public RetResult<Integer> update(").append(entityClassName).append(" t) {\r\n");
+        sb.append("        return super.update(t);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+        
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("updatePage\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public String updatePage(").append(entityClassName).append(" t, Model model) {\r\n");
+        sb.append("        return super.updatePage(t, model);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");     
+        
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("getByKey\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public RetResult<").append(entityClassName).append("> getByKey(String key) {\r\n");
+        sb.append("        return super.getByKey(key);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");     
+
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("getByKeyPage\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public String getByKeyPage(String key, Model model) {\r\n");
+        sb.append("        return super.getByKeyPage(key, model);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");  
+        
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("list\")\r\n");
+    	sb.append("    @ResponseBody\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public RetResult<Page<").append(entityClassName).append(">> list(")
+        		.append(entityClassName).append(" example) {\r\n");
+        sb.append("        return super.list(example);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");  
+      
+        sb.append("    @RequestMapping(\"").append(tableUrl).append("listPage\")\r\n");
+    	sb.append("    @Override\r\n");
+        sb.append("    public String listPage(Model model, ").append(entityClassName).append(" example) {\r\n");
+        sb.append("        return super.listPage(model, example);\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");     
+
+        sb.append("}\r\n");  
+
+        return sb.toString();  
+    }
+
+}

+ 130 - 0
src/main/java/org/geek/szbay/assistant/code/generator/DaoMysqlMaker.java

@@ -0,0 +1,130 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class DaoMysqlMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String tableComment, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + outPath + ";\r\n");  
+        sb.append("\r\n");  
+        
+        //if ("id".equals(key.toLowerCase())) {
+        	// 主键是id
+        	sb.append(inner_parse_with_id(authorName, className, tableName, tableComment,
+        			key, outPath, entityFullClassName,
+                    entityClassName, attrNames, colNames, colTypes, colComments));
+        //} else {
+        	// 主键不是id
+        //	sb.append(inner_parse_not_id(authorName, className, tableName, tableComment, 
+        //            key, outPath, entityFullClassName,
+        //            entityClassName, attrNames, colNames, colTypes, colComments));
+        //}
+        sb.append("    // 非常规sql写这里--- xml 自动生成,不再手动在xml中写sql !! \r\n"); 
+        sb.append("\r\n");
+
+        sb.append("}\r\n");  
+
+        return sb.toString();  
+    }
+    
+    public static final String inner_parse_not_id(String authorName, String className, 
+            String tableName, String tableComment, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+    	StringBuffer sb = new StringBuffer(); 
+    	
+        sb.append("import java.util.List;\r\n");
+        sb.append("\r\n");  
+        sb.append("import org.apache.ibatis.annotations.Mapper;\r\n");
+        sb.append("import org.apache.ibatis.annotations.Param;\r\n");
+        sb.append("\r\n");  
+        
+        sb.append("import " + entityFullClassName + ";\r\n");
+        sb.append("\r\n");  
+
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableComment + "(" + tableName + ") 实体类的Dao", authorName));
+        
+        //实体部分  
+        sb.append("@Mapper \r\n");
+        sb.append("public interface " + className).append(" {\r\n");
+        sb.append("\r\n");
+
+        if (key != null && !key.trim().equals("")) {
+            String keyAttr = TableHelpper.columnNameToAttrName(key);
+            
+            sb.append("    public " + entityClassName + " getBy" + StringUtils.firstToUpperCase(keyAttr))
+                .append("(@Param(\"" + keyAttr + "\") ").append("Long ").append(keyAttr + ");\r\n"); 
+            sb.append("\r\n");
+        }
+        
+        sb.append("    public int save(" + entityClassName + " t);\r\n"); 
+        sb.append("\r\n");
+        
+        sb.append("    public int update(" + entityClassName + " t);\r\n"); 
+        sb.append("\r\n");
+
+        sb.append("    public int countByExample(@Param(\"example\") " + entityClassName + " example);\r\n"); 
+        sb.append("\r\n");
+
+        sb.append("    public List< " + entityClassName + "> listByExample(@Param(\"page\") Integer page,\r\n")
+        	.append("        @Param(\"pageSize\") Integer pageSize,\r\n")
+        	.append("        @Param(\"example\") " + entityClassName + " example);\r\n"); 
+        sb.append("\r\n");
+
+        sb.append("    public int updateByExample(@Param(\"update\") " + entityClassName + " update, \r\n")
+        	.append("        @Param(\"example\") " + entityClassName + " example);\r\n");
+        sb.append("\r\n");
+        
+        return sb.toString();
+    }
+    
+    public static final String inner_parse_with_id(String authorName, String className, 
+            String tableName, String tableComment, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+    	StringBuffer sb = new StringBuffer(); 
+    	
+        sb.append("import org.apache.ibatis.annotations.Mapper;\r\n");
+        sb.append("\r\n");  
+        
+        sb.append("import " + entityFullClassName + ";\r\n");
+        sb.append("\r\n");  
+
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableComment + "(" + tableName + ") 实体类的Dao", authorName));
+        
+        //实体部分  
+        sb.append("@Mapper \r\n");
+        sb.append("public interface " + className)
+        	.append(" extends BaseDao<").append(entityClassName).append("> {\r\n");
+        sb.append("\r\n");
+        
+        return sb.toString();
+    }
+    
+}

+ 185 - 0
src/main/java/org/geek/szbay/assistant/code/generator/EntityMysqlMaker.java

@@ -0,0 +1,185 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class EntityMysqlMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String tableComment, String key, 
+            String entityOutPath, List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + entityOutPath + ";\r\n");  
+        sb.append("\r\n");  
+        
+        if (haveDateType(colTypes)) {
+        	sb.append("import java.util.Date;\r\n");
+        	sb.append("\r\n");  
+        }
+        
+        //类注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableComment + "(" + tableName + ") 实体类", authorName));
+
+        //实体部分  
+        sb.append("public class " + className + " {\r\n");  
+        processAllAttrs(sb, attrNames, colNames, colTypes, colComments);//属性  
+        sb.append("\r\n");  
+        processAllMethod(sb, attrNames, colNames, colTypes, colComments);//get set方法  
+        sb.append("\r\n");  
+        
+        parseHashCode(sb, attrNames);
+        parseEquals(sb, className, attrNames);
+        parseToString(sb, className, attrNames);
+
+        sb.append("}\r\n"); 
+        sb.append("\r\n");  
+
+        return sb.toString();  
+    }
+    
+    private static final boolean haveDateType(List<String> colTypes) {
+    	for(String t : colTypes) {
+    		String typ = t.toLowerCase(); 
+    		 if (typ.indexOf("time") >= 0 || typ.indexOf("date") >= 0) {
+    			 return true;
+    		 }
+    	}
+    	return false;
+    }
+    
+    private static final void parseHashCode(StringBuffer sb, List<String> attrNames) {  
+        sb.append("    @Override\r\n");
+        sb.append("    public int hashCode() { \r\n");
+        sb.append("        final int prime = 31;\r\n");
+        sb.append("\r\n");
+        sb.append("        int resultHashCode = 1;\r\n");
+        sb.append("\r\n");
+        for(String attr : attrNames) {
+            sb.append("        resultHashCode = prime * resultHashCode + ((").append(attr).append(" == null) ? 0 : ").append(attr).append(".hashCode());\r\n");
+        }
+        sb.append("\r\n");
+        sb.append("        return resultHashCode;\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+    }
+    
+
+    private static final void parseEquals(StringBuffer sb, String className, List<String> attrNames) {  
+        sb.append("    @Override\r\n");
+        sb.append("    public boolean equals(Object obj) { \r\n");
+        sb.append("        if (this == obj) {\r\n");
+        sb.append("            return true;\r\n");
+        sb.append("        }\r\n");
+        sb.append("        if (obj == null) {\r\n");
+        sb.append("            return false;\r\n");
+        sb.append("        }\r\n");
+        sb.append("        if (getClass() != obj.getClass()) {\r\n");
+        sb.append("            return false;\r\n");
+        sb.append("        }\r\n");
+        sb.append("\r\n");
+        sb.append("        ").append(className).append(" other = (").append(className).append(") obj;\r\n");
+        sb.append("\r\n");
+        
+        for(String attr : attrNames) {
+            sb.append("        if (").append(attr).append(" == null) {\r\n");
+            sb.append("            if (other.").append(attr).append(" != null) {\r\n");
+            sb.append("                return false;\r\n");
+            sb.append("            }\r\n");
+            sb.append("        } else if (!").append(attr).append(".equals(other.").append(attr).append(")) {\r\n");
+            sb.append("            return false; \r\n");
+            sb.append("        }\r\n");        
+            sb.append("\r\n");
+        }
+        
+        sb.append("        return true;\r\n");
+
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+    }
+
+    private static final void parseToString(StringBuffer sb, String className, List<String> attrNames) {  
+        sb.append("    @Override\r\n");
+        sb.append("    public String toString() { \r\n");
+        sb.append("        StringBuffer sb = new StringBuffer();\r\n");
+        sb.append("\r\n");
+        sb.append("        sb.append(\"").append(className).append(" [\");\r\n");
+        
+        for(int i = 0; i < attrNames.size(); i++) {
+            String attr = attrNames.get(i);
+            
+            sb.append("        sb.append(\"").append(attr).append("=\"").append(").append(").append(attr);
+            if (i < attrNames.size() - 1) {
+                sb.append(").append(\",\");\r\n");    
+            } else {
+                sb.append(");\r\n");    
+            }
+        }
+        sb.append("        sb.append(\"]\");\r\n");
+        sb.append("\r\n");
+        sb.append("        return sb.toString();\r\n");
+        sb.append("    }\r\n");
+        sb.append("\r\n");
+    }
+
+    /** 
+     * 功能:生成所有属性 
+     * @param sb 
+     */  
+    private static final void processAllAttrs(StringBuffer sb, List<String> attrNames, List<String> colNames, 
+            List<String> colTypes, List<String> colComments) {  
+          
+        for (int i = 0; i < colNames.size(); i++) {  
+            sb.append("    /** " + colComments.get(i) + " */;\r\n");
+            sb.append("    private " + colTypes.get(i) + " " + attrNames.get(i) + ";\r\n");
+            sb.append("\r\n");
+        }  
+    }  
+  
+    /** 
+     * 功能:生成所有方法 
+     * @param sb 
+     */  
+    private static final void processAllMethod(StringBuffer sb, List<String> attrNames, List<String> colNames, 
+            List<String> colTypes, List<String> colComments) {  
+        String attr = "";
+        String comment = "";
+        String type = "";
+        String attrMethod = "";
+        
+        for (int i = 0; i < attrNames.size(); i++) {  
+            attr = attrNames.get(i);
+            comment = colComments.get(i);
+            type = colTypes.get(i);
+            attrMethod = StringUtils.firstToUpperCase(attr);
+            
+            sb.append("    /** setter: " + comment + " */;\r\n");
+            sb.append("    public void set" + attrMethod + "(" + type + " " +   
+                    attrNames.get(i) + ") {\r\n");  
+            sb.append("        this." + attr + " = " + attr + ";\r\n");  
+            sb.append("    }\r\n\r\n");  
+            sb.append("    /** getter: " + comment + " */;\r\n");
+            sb.append("    public " + type + " get" + attrMethod + "() {\r\n");  
+            sb.append("        return " + attr + ";\r\n");  
+            sb.append("    }\r\n");  
+            sb.append("\r\n");
+        }  
+          
+    }  
+
+}

+ 324 - 0
src/main/java/org/geek/szbay/assistant/code/generator/MapperXmlMaker.java

@@ -0,0 +1,324 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+ * <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC
+ * "-//mybatis.org//DTD Mapper 3.0//EN"
+ * "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+ * <mapper namespace="com.travel.pay.dao.write.pay.PayOrderLogDao">
+ * 
+ * <insert id="save" useGeneratedKeys="true" keyProperty="id" parameterType=
+ * "com.travel.pay.model.pay.PayOrderLogDO"> insert into pay_order_log
+ * <trim prefix="(" suffix=")" suffixOverrides=",">
+ * <if test="payOrderId != null" > pay_order_id, </if> <if test="type != null" >
+ * type, </if> <if test="result != null" > result, </if>
+ * <if test="input != null" > input, </if> <if test="output != null" > output,
+ * </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=",">
+ * <if test="payOrderId != null" > #{payOrderId}, </if>
+ * <if test="type != null" > #{type}, </if> <if test="result != null" >
+ * #{result}, </if> <if test="input != null" > #{input}, </if>
+ * <if test="output != null" > #{output}, </if> </trim> </insert>
+ * 
+ * <update id="update" parameterType="com.travel.pay.model.pay.PayOrderLogDO">
+ * update pay_order_log <set> <if test="payOrderId != null" > pay_order_id =
+ * #{payOrderId}, </if> <if test="type != null" > type = #{type}, </if>
+ * <if test="result != null" > result = #{result}, </if>
+ * <if test="input != null" > input = #{input}, </if>
+ * <if test="output != null" > output = #{output}, </if> </set> where id = #{id}
+ * </update>
+ * 
+ * <resultMap id="payOrderLogMap" type="com.travel.pay.model.pay.PayOrderLogDO">
+ * <id column="id" property="id"/>
+ * <result column="pay_order_id" property="payOrderId"/>
+ * <result column="type" property="type"/>
+ * <result column="result" property="result"/>
+ * <result column="input" property="input"/>
+ * <result column="output" property="output"/>
+ * <result column="gmt_create" property="gmtCreate"/>
+ * <result column="gmt_modified" property="gmtModified"/> </resultMap>
+ * 
+ * <sql id="allField">
+ * id,pay_order_id,type,result,input,output,gmt_create,gmt_modified </sql>
+ * 
+ * <select id="getById" parameterType="java.lang.Long" resultMap=
+ * "payOrderLogMap"> select <include refid="allField"/> from pay_order_log where
+ * id = #{id} </select>
+ * 
+ * </mapper>
+ * 
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class MapperXmlMaker {
+
+	public static final String parse(String authorName, String tableName, String tableComment, 
+			String key, String outPath,
+			String entityFullClassName, String entityClassName, 
+			String daoFullClassName, String daoClassName,
+			List<String> attrNames, List<String> colNames, 
+			List<String> colTypes, List<String> colComments) {
+		StringBuffer sb = new StringBuffer();
+		String className = TableHelpper.columnNameToAttrName(tableName);
+		String keyAttr = TableHelpper.columnNameToAttrName(key);
+
+		parseHead(sb);
+		parseNamespace(sb, daoFullClassName);
+		parseResultMap(sb, key, keyAttr, className, entityFullClassName, colNames, attrNames);
+		parseAllField(sb, colNames);
+
+		parseDelete(sb, key, keyAttr, tableName, entityFullClassName, colNames, attrNames);
+		parseInsert(sb, key, keyAttr, tableName, entityFullClassName, colNames, attrNames);
+		parseUpdate(sb, key, keyAttr, tableName, entityFullClassName, colNames, attrNames);
+		parseUpdateByExample(sb, key, keyAttr, tableName, entityFullClassName, colNames, attrNames);
+
+		parseCountByExample(sb, key, keyAttr, className, tableName, colNames, attrNames);
+		parseListByExample(sb, key, keyAttr, className, tableName, colNames, attrNames);
+
+		parseGetByKey(sb, key, keyAttr, className, tableName);
+
+		parseEnd(sb);
+
+		return sb.toString();
+	}
+
+	private static final void parseHead(StringBuffer sb) {
+		sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>").append("\r\n");
+		sb.append(
+				"<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">")
+				.append("\r\n");
+	}
+
+	private static final void parseNamespace(StringBuffer sb, String readFullClassName) {
+		sb.append("<mapper namespace=\"").append(readFullClassName).append("\"> ").append("\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseResultMap(StringBuffer sb, String key, String keyAttr, String className,
+			String entityFullClassName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <resultMap ").append("id=\"").append(className).append("Map\" type=\"")
+				.append(entityFullClassName).append("\">").append("\r\n");
+		sb.append("        <id column=\"").append(key).append("\" property=\"").append(keyAttr).append("\"/>")
+				.append("\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			if (column.equals(key)) {
+				continue;
+			}
+
+			String attr = attrNames.get(i);
+
+			sb.append("        <result column=\"").append(column).append("\" property=\"").append(attr).append("\"/>")
+					.append("\r\n");
+		}
+
+		sb.append("    </resultMap>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseAllField(StringBuffer sb, List<String> colNames) {
+		sb.append("    <sql id=\"allField\">").append("\r\n");
+		sb.append("        ");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			sb.append(column);
+			if (i != colNames.size() - 1) {
+				sb.append(",");
+			}
+		}
+
+		sb.append("\r\n");
+		sb.append("    </sql>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseDelete(StringBuffer sb, String key, String keyAttr, String tableName,
+			String entityFullClassName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <delete id=\"delete\">\r\n");
+		sb.append("        delete from " + tableName + "\r\n");
+		sb.append("        where " + key + " = #{key}\r\n");
+		sb.append("    </delete>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseInsert(StringBuffer sb, String key, String keyAttr, String tableName,
+			String entityFullClassName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <insert id=\"save\" useGeneratedKeys=\"");
+		if ("id".equals(key)) {
+			sb.append("true\" ");
+		} else {
+			sb.append("false\" ");
+		}
+		sb.append("keyProperty=\"").append(keyAttr).append("\" ");
+		sb.append("parameterType=\"").append(entityFullClassName).append("\">\r\n");
+
+		sb.append("        insert into ").append(tableName).append("\r\n");
+		sb.append("        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			String attr = attrNames.get(i);
+
+			if (column.equals(key) && "id".equals(key)) {
+				// key自动生成,所以不做任何处理
+				continue;
+			}
+
+			sb.append("            <if test=\"").append(attr).append(" != null\" >\r\n");
+			sb.append("                ").append(column).append(", \r\n");
+			sb.append("            </if>\r\n");
+		}
+
+		sb.append("        </trim>\r\n");
+
+		sb.append("        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String attr = attrNames.get(i);
+			if (attr.equals("id")) {
+				continue;
+			}
+
+			sb.append("            <if test=\"").append(attr).append(" != null\" >\r\n");
+			sb.append("                #{").append(attr).append("}, \r\n");
+			sb.append("            </if>\r\n");
+		}
+
+		sb.append("        </trim>\r\n");
+
+		sb.append("    </insert>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseUpdate(StringBuffer sb, String key, String keyAttr, String tableName,
+			String entityFullClassName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <update id=\"update\"");
+		sb.append(" parameterType=\"").append(entityFullClassName).append("\">\r\n");
+
+		sb.append("        update ").append(tableName).append("\r\n");
+		sb.append("        <set>\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			String attr = attrNames.get(i);
+
+			if (column.equals(key)) {
+				// key不做任何处理
+				continue;
+			}
+
+			sb.append("            <if test=\"").append(attr).append(" != null\" >\r\n");
+			sb.append("                ").append(column).append(" = #{").append(attr).append("}, \r\n");
+			sb.append("            </if>\r\n");
+		}
+
+		sb.append("        </set>\r\n");
+
+		sb.append("        where ").append(key).append(" = #{").append(keyAttr).append("}\r\n");
+
+		sb.append("    </update>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseGetByKey(StringBuffer sb, String key, String keyAttr, String className,
+			String tableName) {
+		sb.append("    <select id=\"getByKey\" ")
+				.append("resultMap=\"").append(StringUtils.firstToLowerCase(className))
+				.append("Map\">").append("\r\n");
+		sb.append("        select <include refid=\"allField\"/>\r\n");
+		sb.append("        from ").append(tableName).append(" where ").append(key)
+				.append(" = #{key}\r\n");
+		sb.append("    </select>\r\n");
+		sb.append("\r\n");
+	}
+	
+	private static void parseCountByExample(StringBuffer sb, String key, String keyAttr, String className,
+			String tableName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <select id=\"countByExample\"")
+				.append(" resultType=\"java.lang.Integer\"").append("> \r\n");
+		sb.append("        select count(*) ").append("from ").append(tableName).append(" where 1 = 1 ").append("\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			String attr = attrNames.get(i);
+
+			sb.append("        <if test=\"example.").append(attr).append(" != null\" >\r\n");
+			sb.append("            and ").append(column).append(" = #{example.").append(attr).append("} \r\n");
+			sb.append("        </if>\r\n");
+		}
+
+		sb.append("    </select>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static void parseUpdateByExample(StringBuffer sb, String key, String keyAttr, String tableName,
+			String entityFullClassName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <update id=\"updateByExample\">\r\n");
+		sb.append("        update ").append(tableName).append("\r\n");
+		sb.append("        <set>\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			String attr = attrNames.get(i);
+
+			if (column.equals(key)) {
+				// key不做任何处理
+				continue;
+			}
+
+			sb.append("            <if test=\"update.").append(attr).append(" != null\" >\r\n");
+			sb.append("                ").append(column).append(" = #{update.").append(attr).append("}, \r\n");
+			sb.append("            </if>\r\n");
+		}
+
+		sb.append("        </set>\r\n");
+		sb.append("        where 1 = 1 \r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			String attr = attrNames.get(i);
+
+			sb.append("        <if test=\"example.").append(attr).append(" != null\" >\r\n");
+			sb.append("            and ").append(column).append(" = #{example.").append(attr).append("} \r\n");
+			sb.append("        </if>\r\n");
+		}
+
+		sb.append("    </update>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseListByExample(StringBuffer sb, String key, String keyAttr, String className,
+			String tableName, List<String> colNames, List<String> attrNames) {
+		sb.append("    <select id=\"listByExample\" ").append(" resultMap=\"")
+				.append(StringUtils.firstToLowerCase(className)).append("Map\">").append("\r\n");
+		sb.append("        select <include refid=\"allField\" />\r\n");
+		sb.append("        from ").append(tableName).append(" where 1 = 1 ").append("\r\n");
+
+		for (int i = 0; i < colNames.size(); i++) {
+			String column = colNames.get(i);
+			String attr = attrNames.get(i);
+
+			sb.append("        <if test=\"example.").append(attr).append(" != null\" >\r\n");
+			sb.append("            and ").append(column).append(" = #{example.").append(attr).append("} \r\n");
+			sb.append("        </if>\r\n");
+		}
+
+		sb.append("        limit ${pageSize} offset ${(page - 1) * pageSize}").append("\r\n");
+		
+		sb.append("    </select>\r\n");
+		sb.append("\r\n");
+	}
+
+	private static final void parseEnd(StringBuffer sb) {
+		sb.append("\r\n");
+		sb.append("</mapper>");
+		sb.append("\r\n");
+	}
+
+}

+ 121 - 0
src/main/java/org/geek/szbay/assistant/code/generator/ReadMapperMaker.java

@@ -0,0 +1,121 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.travel.pay.dao.write.pay.PayOrderLogReadDao">
+
+    <resultMap id="payOrderLogMap" type="com.travel.pay.model.pay.PayOrderLogDO">
+        <id column="id" property="id"/>
+        <result column="pay_order_id" property="payOrderId"/>
+        <result column="type" property="type"/>
+        <result column="result" property="result"/>
+        <result column="input" property="input"/>
+        <result column="output" property="output"/>
+        <result column="gmt_create" property="gmtCreate"/>
+        <result column="gmt_modified" property="gmtModified"/>
+    </resultMap>
+
+    <sql id="allField">
+        id,pay_order_id,type,result,input,output,gmt_create,gmt_modified
+    </sql>
+
+    <select id="getById" parameterType="java.lang.Long" resultMap="payOrderLogMap">
+        select <include refid="allField"/>
+        from pay_order_log where id = #{id}
+    </select>
+
+</mapper>
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class ReadMapperMaker {
+
+    public static final String parse(String authorName, String tableName, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            String readFullClassName, String readClassName,
+            List<String> attrNames, List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+        String className = TableHelpper.columnNameToAttrName(tableName); 
+        String keyAttr = TableHelpper.columnNameToAttrName(key);
+        
+        parseHead(sb);
+        parseNamespace(sb, readFullClassName);
+        parseResultMap(sb, key, keyAttr, className, entityFullClassName, colNames, attrNames);
+        parseAllField(sb, colNames);
+        parseGetByKey(sb, key, keyAttr, className, tableName);
+        parseEnd(sb);
+        
+        return sb.toString();
+    }
+    
+    private static final void parseHead(StringBuffer sb) {  
+        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>").append("\r\n");  
+        sb.append("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">").append("\r\n");
+    }
+
+    private static final void parseNamespace(StringBuffer sb, String readFullClassName) {  
+        sb.append("<mapper namespace=\"").append(readFullClassName).append("\"> ").append("\r\n");  
+        sb.append("\r\n");  
+    }
+
+    private static final void parseResultMap(StringBuffer sb, String key, String keyAttr, String className,  
+            String entityFullClassName, List<String> colNames, List<String> attrNames) {
+        sb.append("    <resultMap ").append("id=\"").append(className).append("Map\" type=\"").append(entityFullClassName).append("\">").append("\r\n");
+        sb.append("        <id column=\"").append(key).append("\" property=\"").append(keyAttr).append("\"/>").append("\r\n");
+        
+        for(int i = 0; i < colNames.size(); i++) {
+            String column = colNames.get(i); 
+            if (column.equals(key)) {
+                continue;
+            }
+            
+            String attr = attrNames.get(i);
+            
+            sb.append("        <result column=\"").append(column).append("\" property=\"").append(attr).append("\"/>").append("\r\n");
+        }
+        
+        sb.append("    </resultMap>\r\n");
+        sb.append("\r\n");
+    }
+
+    private static final void parseAllField(StringBuffer sb, List<String> colNames) {  
+        sb.append("    <sql id=\"allField\">").append("\r\n");
+        sb.append("        ");
+        
+        for(int i = 0; i < colNames.size(); i++) {
+            String column = colNames.get(i); 
+            sb.append(column);
+            if (i != colNames.size() - 1) {
+                sb.append(",");
+            }
+        }
+        
+        sb.append("\r\n");
+        sb.append("    </sql>\r\n");
+        sb.append("\r\n");
+    }
+
+    private static final void parseGetByKey(StringBuffer sb, String key, String keyAttr, String className, String tableName) {  
+        sb.append("    <select id=\"getBy").append(StringUtils.firstToUpperCase(keyAttr)).append("\" ")
+                .append("parameterType=\"java.lang.Long\" resultMap=\"")
+                .append(StringUtils.firstToLowerCase(className)).append("Map\">").append("\r\n");
+        sb.append("        select <include refid=\"allField\"/>\r\n");
+        sb.append("        from ").append(tableName).append(" where ").append(key).append(" = #{").append(keyAttr).append("}\r\n");
+        sb.append("    </select>");
+        sb.append("\r\n");
+    }
+
+    private static final void parseEnd(StringBuffer sb) {  
+        sb.append("\r\n");
+        sb.append("</mapper>");
+        sb.append("\r\n");
+    }
+
+}

+ 57 - 0
src/main/java/org/geek/szbay/assistant/code/generator/ReaderMysqlMaker.java

@@ -0,0 +1,57 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class ReaderMysqlMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String key, String outPath, String entityFullClassName,
+            String entityClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + outPath + ";\r\n");  
+        sb.append("\r\n");  
+        sb.append("import org.apache.ibatis.annotations.Param;\r\n");
+        sb.append("\r\n");  
+        sb.append("import " + entityFullClassName + ";\r\n");
+        sb.append("\r\n");  
+
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableName + " 实体类的读取器", authorName));
+        
+        //实体部分  
+        sb.append("public interface " + className + " {\r\n");
+        sb.append("\r\n");
+        
+        if (key != null && !key.trim().equals("")) {
+            String keyAttr = TableHelpper.columnNameToAttrName(key);
+            
+            sb.append("    public " + entityClassName + " getBy" + StringUtils.firstToUpperCase(keyAttr))
+                .append("(@Param(\"" + keyAttr + "\") ").append("Long ").append(keyAttr + ");\r\n"); 
+            sb.append("\r\n");
+        }
+        
+        sb.append("}\r\n");  
+
+        return sb.toString();  
+    }
+    
+}

+ 65 - 0
src/main/java/org/geek/szbay/assistant/code/generator/ServiceImplMysqlMaker.java

@@ -0,0 +1,65 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+import org.geek.szbay.assistant.utils.StringUtils;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class ServiceImplMysqlMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String tableComment, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            String daoFullClassName, String daoClassName,
+            String serviceFullClassName, String serviceClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + outPath + ";\r\n");  
+        sb.append("\r\n");  
+        
+        sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n");
+        sb.append("import org.springframework.stereotype.Service;\r\n");
+        sb.append("\r\n");  
+        
+        sb.append("import " + daoFullClassName + ";\r\n");
+        sb.append("import " + serviceFullClassName + ";\r\n");
+        sb.append("import " + entityFullClassName + ";\r\n");
+        sb.append("\r\n");  
+        
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableComment + "(" + tableName + ") 实体类的数据服务类实现", authorName));
+
+        sb.append("@Service\r\n");
+        
+        //实体部分 
+        sb.append("public class ").append(className)
+        	.append(" extends BaseServiceImpl<").append(entityClassName).append(">\r\n")
+        	.append("        implements ").append(serviceClassName)
+        	.append("<").append(entityClassName).append("> {\r\n");
+        sb.append("\r\n");
+        
+        String daoObject = StringUtils.firstToLowerCase(daoClassName);
+        sb.append("    @Autowired \r\n");
+        sb.append("    private ").append(daoClassName).append(" ").append(daoObject).append(";\r\n");
+        sb.append("\r\n");
+        
+        sb.append("}\r\n");  
+
+        return sb.toString();  
+    }
+
+}

+ 49 - 0
src/main/java/org/geek/szbay/assistant/code/generator/ServiceMysqlMaker.java

@@ -0,0 +1,49 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class ServiceMysqlMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String tableComment, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + outPath + ";\r\n");  
+        sb.append("\r\n");  
+//        sb.append("import " + entityFullClassName + ";\r\n");
+//        sb.append("\r\n");  
+        
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableComment + "(" + tableName + ") 实体类的数据服务类", authorName));
+        
+        //实体部分  
+//        sb.append("public interface " + className + " {\r\n");
+        //public interface FpExamDefineService<FpExamDefineDO> extends BaseService<FpExamDefineDO> {
+        sb.append("public interface ").append(className)
+        		.append("<").append(entityClassName).append("> extends BaseService<")
+        		.append(entityClassName).append("> {\r\n");	
+        sb.append("\r\n");
+        
+        sb.append("}\r\n");  
+
+        return sb.toString();  
+    }
+
+}

+ 195 - 0
src/main/java/org/geek/szbay/assistant/code/generator/WriteMapperMaker.java

@@ -0,0 +1,195 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.TableHelpper;
+
+/**
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.travel.pay.dao.write.pay.PayOrderLogWriteDao">
+
+    <insert id="save" useGeneratedKeys="true" keyProperty="id" parameterType="com.travel.pay.model.pay.PayOrderLogDO">
+        insert into pay_order_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="payOrderId != null" >
+                pay_order_id,
+            </if>
+            <if test="type != null" >
+                type,
+            </if>
+            <if test="result != null" >
+                result,
+            </if>
+            <if test="input != null" >
+                input,
+            </if>
+            <if test="output != null" >
+                output,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="payOrderId != null" >
+                #{payOrderId},
+            </if>
+            <if test="type != null" >
+                #{type},
+            </if>
+            <if test="result != null" >
+                #{result},
+            </if>
+            <if test="input != null" >
+                #{input},
+            </if>
+            <if test="output != null" >
+                #{output},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="update" parameterType="com.travel.pay.model.pay.PayOrderLogDO">
+        update pay_order_log
+        <set>
+            <if test="payOrderId != null" >
+                pay_order_id = #{payOrderId},
+            </if>
+            <if test="type != null" >
+                type = #{type},
+            </if>
+            <if test="result != null" >
+                result = #{result},
+            </if>
+            <if test="input != null" >
+                input = #{input},
+            </if>
+            <if test="output != null" >
+                output = #{output},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+</mapper>
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class WriteMapperMaker {
+
+    public static final String parse(String authorName,  
+            String tableName, String key, String outPath, 
+            String entityFullClassName, String entityClassName,
+            String writeFullClassName, String writeClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+        String keyAttr = TableHelpper.columnNameToAttrName(key);
+        
+        parseHead(sb);
+        parseNamespace(sb, writeFullClassName);
+        
+        parseInsert(sb, key, keyAttr, tableName, entityFullClassName, colNames, attrNames);
+        
+        parseUpdate(sb, key, keyAttr, tableName, entityFullClassName, colNames, attrNames);
+        
+        parseEnd(sb);
+        
+        return sb.toString();
+    }
+    
+    private static final void parseHead(StringBuffer sb) {  
+        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>").append("\r\n");  
+        sb.append("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">").append("\r\n");
+    }
+
+    private static final void parseNamespace(StringBuffer sb, String writeFullClassName) {  
+        sb.append("<mapper namespace=\"").append(writeFullClassName).append("\"> ").append("\r\n");  
+        sb.append("\r\n");  
+    }
+
+    private static final void parseInsert(StringBuffer sb, String key, String keyAttr, String tableName,  
+            String entityFullClassName, List<String> colNames, List<String> attrNames) {
+        sb.append("    <insert id=\"save\" useGeneratedKeys=\"");
+        if ("id".equals(key)) {
+            sb.append("true\" ");    
+        } else {
+            sb.append("false\" ");
+        }
+        sb.append("keyProperty=\"").append(keyAttr).append("\" ");
+        sb.append("parameterType=\"").append(entityFullClassName).append("\">\r\n");
+        
+        sb.append("        insert into ").append(tableName).append("\r\n");
+        sb.append("        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\r\n");
+
+        for(int i = 0; i < colNames.size(); i++) {
+            String column = colNames.get(i);
+            String attr = attrNames.get(i);
+            
+            if (column.equals(key) && "id".equals(key)) {
+                // key自动生成,所以不做任何处理
+                continue;
+            }
+            
+            sb.append("            <if test=\"").append(attr).append(" != null\" >\r\n");
+            sb.append("                ").append(column).append(", \r\n");
+            sb.append("            </if>\r\n");
+        }
+        
+        sb.append("        </trim>\r\n");
+        
+        sb.append("        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\r\n");
+        
+        for(int i = 0; i < colNames.size(); i++) {
+            String attr = attrNames.get(i); 
+            if (attr.equals("id")) {
+                continue;
+            }
+
+            sb.append("            <if test=\"").append(attr).append(" != null\" >\r\n");
+            sb.append("                #{").append(attr).append("}, \r\n");
+            sb.append("            </if>\r\n");
+        }
+
+        sb.append("        </trim>\r\n");
+
+        sb.append("    </insert>\r\n");
+        sb.append("\r\n");
+    }
+
+    private static final void parseUpdate(StringBuffer sb, String key, String keyAttr, String tableName, 
+            String entityFullClassName, List<String> colNames, List<String> attrNames) {  
+        sb.append("    <update id=\"update\"");
+        sb.append(" parameterType=\"").append(entityFullClassName).append("\">\r\n");
+        
+        sb.append("        update ").append(tableName).append("\r\n");
+        sb.append("        <set>\r\n");
+
+        for(int i = 0; i < colNames.size(); i++) {
+            String column = colNames.get(i);
+            String attr = attrNames.get(i);
+            
+            if (column.equals(key)) {
+                // key不做任何处理
+                continue;
+            }
+            
+            sb.append("            <if test=\"").append(attr).append(" != null\" >\r\n");
+            sb.append("                ").append(column).append(" = #{").append(attr).append("}, \r\n");
+            sb.append("            </if>\r\n");
+        }
+        
+        sb.append("        </set>\r\n");
+        
+        sb.append("        where ").append(key).append(" = #{").append(keyAttr).append("}\r\n");
+        
+        sb.append("    </update>");
+        sb.append("\r\n");
+    }
+
+    private static final void parseEnd(StringBuffer sb) {  
+        sb.append("\r\n");
+        sb.append("</mapper>");
+        sb.append("\r\n");
+    }
+
+}

+ 51 - 0
src/main/java/org/geek/szbay/assistant/code/generator/WriterMysqlMaker.java

@@ -0,0 +1,51 @@
+package org.geek.szbay.assistant.code.generator;
+
+import java.util.List;
+
+import org.geek.szbay.assistant.code.generator.helpper.MakeHelpper;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午7:31:51
+ * @version 1.0
+ */
+public class WriterMysqlMaker {
+
+    /** 
+     * 功能:生成实体类主体代码 
+     * @param colnames 
+     * @param colTypes 
+     * @param colSizes 
+     * @return 
+     */  
+    public static final String parse(String authorName, String className, 
+            String tableName, String key, String outPath, String entityFullClassName,
+            String entityClassName,
+            List<String> attrNames, 
+            List<String> colNames, List<String> colTypes, List<String> colComments) {  
+        StringBuffer sb = new StringBuffer();  
+          
+        sb.append("package " + outPath + ";\r\n");  
+        sb.append("\r\n");  
+        sb.append("import " + entityFullClassName + ";\r\n");
+        sb.append("\r\n");  
+
+        //注释部分  
+        sb.append(MakeHelpper.makeClassComments(tableName + " 实体类的写入器", authorName));
+        
+        //实体部分  
+        sb.append("public interface " + className + " {\r\n");
+        sb.append("\r\n");
+        
+        sb.append("    public int save(" + entityClassName + " t);\r\n"); 
+        sb.append("\r\n");
+        
+        sb.append("    public int update(" + entityClassName + " t);\r\n"); 
+        sb.append("\r\n");
+
+        sb.append("}\r\n");  
+
+        return sb.toString();  
+    }
+
+}

+ 30 - 0
src/main/java/org/geek/szbay/assistant/code/generator/helpper/BeanHelpper.java

@@ -0,0 +1,30 @@
+package org.geek.szbay.assistant.code.generator.helpper;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月26日 上午10:21:40
+ * @version 1.0
+ */
+public class BeanHelpper {
+
+    public static final void getBeanSetterMethod(Class<?> clazz) {
+        Method[] methods = clazz.getDeclaredMethods();
+        for (Method m : methods) {
+            String methodName = m.getName();
+
+            if (methodName.startsWith("set")) {
+                String getterName = "get" + methodName.substring(3);
+                // weixinDO.setOrderTimeStart(requestInDTO.getOrderTimeStart());
+                System.out
+                        .println("weixinDO." + methodName + "(payRequestDO." + getterName + "());");
+            }
+        }
+    }
+
+    public static void main(String[] args) {
+//        Class<?> clazz = com.travel.pay.model.trade.TradeListDO.class;
+//        getBeanSetterMethod(clazz);
+    }
+}

+ 17 - 0
src/main/java/org/geek/szbay/assistant/code/generator/helpper/MakeHelpper.java

@@ -0,0 +1,17 @@
+package org.geek.szbay.assistant.code.generator.helpper;
+
+public class MakeHelpper {
+
+	public static String makeClassComments(String className, String authorName) {
+        //类注释部分  
+		StringBuffer sb = new StringBuffer();  
+		
+		sb.append("/**\r\n");  
+        sb.append(" * " + className + " \r\n");  
+        sb.append(" * \r\n");  
+        sb.append(" * author: " + authorName + "\r\n");  
+        sb.append(" */ \r\n");  
+        
+        return sb.toString();
+	}
+}

+ 101 - 0
src/main/java/org/geek/szbay/assistant/code/generator/helpper/TableHelpper.java

@@ -0,0 +1,101 @@
+package org.geek.szbay.assistant.code.generator.helpper;
+
+import org.geek.szbay.assistant.utils.CharUtils;
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午10:19:00
+ * @version 1.0
+ */
+public class TableHelpper {
+    
+    public final static String tableNameToClassName(String tableName) {  
+        char[] ch = tableName.toCharArray();
+        
+        ch[0] = CharUtils.toUpperChar(ch[0]);
+
+        StringBuffer sb = new StringBuffer();
+        
+        boolean toUpper = false;
+        
+        for(char c : ch) {
+            if (c == '_') {
+                toUpper = true;
+            } else {
+                if (toUpper) {
+                    c = CharUtils.toUpperChar(c);
+                    toUpper = false;
+                }
+                
+                sb.append(c);
+            }
+        }
+        
+        return sb.toString();  
+    }  
+
+    public final static String columnNameToAttrName(String columnName) {  
+        char[] ch = columnName.toCharArray();
+        
+        ch[0] = CharUtils.toLowerChar(ch[0]);
+
+        StringBuffer sb = new StringBuffer();
+        
+        boolean toUpper = false;
+        
+        for(char c : ch) {
+            if (c == '_') {
+                toUpper = true;
+            } else {
+                if (toUpper) {
+                    c = CharUtils.toUpperChar(c);
+                    toUpper = false;
+                }
+                
+                sb.append(c);
+            }
+        }
+        
+        return sb.toString();  
+    }  
+
+    /** 
+     * 功能:获得列的数据类型 
+     * @param sqlType 
+     * @return 
+     */  
+    public final static String sqlTypeToJavaType(String sqlType) {
+        if(sqlType.equalsIgnoreCase("bit")){  
+            return "Boolean";  
+        }else if(sqlType.equalsIgnoreCase("year")){  
+            return "Integer";  
+        }else if(sqlType.equalsIgnoreCase("tinyint")){  
+            return "Integer";  
+        }else if(sqlType.equalsIgnoreCase("smallint")){  
+            return "Integer";  
+        }else if(sqlType.equalsIgnoreCase("int")){  
+            return "Integer";  
+        }else if(sqlType.equalsIgnoreCase("bigint")){  
+            return "Long";  
+        }else if(sqlType.equalsIgnoreCase("float")){  
+            return "Float";  
+        }else if(sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric")   
+                || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")   
+                || sqlType.equalsIgnoreCase("smallmoney") || sqlType.equalsIgnoreCase("double")){  
+            return "Double";  
+        }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")   
+                || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")   
+                || sqlType.equalsIgnoreCase("text") || sqlType.equalsIgnoreCase("longtext")){  
+            return "String";  
+        }else if(sqlType.equalsIgnoreCase("datetime") || sqlType.equalsIgnoreCase("date")
+                || sqlType.equalsIgnoreCase("timestamp") || sqlType.equalsIgnoreCase("time")){  
+            return "Date";  
+        }else if(sqlType.equalsIgnoreCase("image") || sqlType.equalsIgnoreCase("blob")
+                || sqlType.equalsIgnoreCase("longbolb") || sqlType.equalsIgnoreCase("mediumttext")){  
+            return "Blob";  
+        }  
+
+        return null;  
+    }  
+
+}

+ 25 - 0
src/main/java/org/geek/szbay/assistant/utils/CharUtils.java

@@ -0,0 +1,25 @@
+package org.geek.szbay.assistant.utils;
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午10:17:19
+ * @version 1.0
+ */
+public class CharUtils {
+
+    public final static char toUpperChar(char c) {
+        if(c >= 'a' && c <= 'z') {  
+            return (char)(c - 32);  
+        } else {
+            return c;
+        }
+    }
+    
+    public final static char toLowerChar(char c) {
+        if(c >= 'A' && c <= 'Z') {  
+            return (char)(c + 32);  
+        } else {
+            return c;
+        }
+    }
+
+}

+ 68 - 0
src/main/java/org/geek/szbay/assistant/utils/DateUtils.java

@@ -0,0 +1,68 @@
+package org.geek.szbay.assistant.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 日期的相关工具
+ * 
+ * @author wutianbin
+ * @Time:2017年5月14日 下午1:12:05
+ * @version 1.0
+ */
+public class DateUtils {
+
+    private final static String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    
+    /**
+     * 获取到当前时间的字符串,默认格式为"yyyy-MM-dd HH:mm:ss"
+     *nowDatetimeString:(). 
+      * @author wutianbin 
+     * @return
+     */
+    public final static String nowDatetimeString() {
+        // 设置日期格式
+        SimpleDateFormat df = new SimpleDateFormat(DATETIME_FORMAT);
+        return df.format(new Date());    
+    }
+    
+    public final static Date stringToDatetime(String value) {
+        if (value == null) {
+            return null;
+        }
+        
+        SimpleDateFormat df = new SimpleDateFormat(DATETIME_FORMAT);
+        try {
+            return df.parse(value.trim());
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        
+        return null;
+    }
+ 
+    public static Date strToDate(String date, String pattern) {
+        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
+        formatter.setLenient(false);
+        try {
+            return formatter.parse(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    
+    public static void main(String arg[]) {
+        Date receiptTime = strToDate("2016-12-27 23:10:55", "yyyy-MM-dd HH:mm:ss");   
+//        Date compTime = strToDate("2016-06-01 00:00:00", "yyyy-MM-dd hh:mm:ss");
+        Date compTime = strToDate("2016-06-01 00:00:10", "yyyy-MM-dd HH:mm:ss");
+        System.out.println(receiptTime);
+        System.out.println(compTime);
+//        if (receiptTime.getTime() <= compTime.getTime()) {
+//            System.out.println("OK"); 
+//        } else {
+//            System.out.println("not bad");
+//        }
+    }
+}

+ 18 - 0
src/main/java/org/geek/szbay/assistant/utils/RandomStrCreater.java

@@ -0,0 +1,18 @@
+package org.geek.szbay.assistant.utils;
+
+import java.util.UUID;
+
+/**
+ * 随机字符串生成器。
+ * 
+ * @author wutianbin
+ * @Time:2017年5月15日 下午8:57:21
+ * @version 1.0
+ */
+public class RandomStrCreater {
+
+    public final static String generate() {
+        return UUID.randomUUID().toString().replaceAll("-", "");
+    }
+    
+}

+ 32 - 0
src/main/java/org/geek/szbay/assistant/utils/StringUtils.java

@@ -0,0 +1,32 @@
+package org.geek.szbay.assistant.utils;
+
+
+/**
+ * @author wutianbin
+ * @Time:2017年5月18日 下午10:16:32
+ * @version 1.0
+ */
+public class StringUtils {
+
+    public static final String firstToUpperCase(String value) {
+        char[] ch = value.toCharArray();  
+        
+        ch[0] = CharUtils.toUpperChar(ch[0]);
+          
+        return new String(ch);  
+    }
+    
+    public static final String firstToLowerCase(String value) {
+        char[] ch = value.toCharArray();  
+        
+        ch[0] = CharUtils.toLowerChar(ch[0]);
+          
+        return new String(ch);  
+    }
+
+    public static void main(String arg[]) {
+        String value = "20160906153520251";
+        
+        System.out.println(value.substring(0, 4));        
+    }
+}