Java自动生成 bean controller dao service util 直接复制过去就可以用

package com.util;

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Date;

/**
 * @author Gaojie
 * @date 2018/10/2 11:37
 * 通过数据库表自动生成JavaBean Dao.
 * 值得注意的是该项目是建立在com包下
 * 暂无发现BUG 已调试修改 代码健全;
 * 弃用功能:百度翻译
 */
public class Automatically {

    /**
     * 指定实体生成所在包的路径 需要修改
     */
    private static String packageOutPath = "E:\\IDEA工程\\JSP\\1107_Test\\src\\main\\java";
    /**
     * 作者名字 需要修改
     */
    private static String authorName = "GaoJie";
    /**
     * 获取conn连接 下面两个都得改
     */
    private static Connection con = DbManGer.getConn();
    /**
     * 注意我后面还有个 ;号
     */
    private static String getConn = "DbManGer.getConn();";
    /**
     * 表名 多表用-隔开
     */
    private static String tableName = "carinf";
    private static String daoName;
    private static String daoImplName;
    private static String serviceName;
    private static String serviceImplName;
    private static String servletName;

    /**
     * 列名数组
     */
    private static String[] colNames;
    /**
     * 列名类型数组
     */
    private static String[] colTypes;

    private static PreparedStatement ps = null;

    public static void main(String[] args) {
        // 分割表名数组
        String[] split = tableName.split("-");
        // 遍历 多表
        for (int i = 0; i < split.length; i++) {
            tableName = split[i];
            daoName = initcap(tableName) + "Dao";
            daoImplName = initcap(tableName) + "DaoImpl";
            serviceName = initcap(tableName) + "Service";
            serviceImplName = initcap(tableName) + "ServiceImpl";
            servletName = initcap(tableName) + "Servlet";
            //生成JavaBean
            generateJavaBean();
            //生成Dao 接口
            generateDao();
            //生成Dao 实现
            generateDaoImpl();
            //生成service
            generateService();
            //生成serviceImpl
            generateServiceImpl();
            //生成servlet
            generateServlet();
        }
    }


    /**
     * 功能:生成JavaBean
     */
    private static void generateJavaBean() {
        //查要生成JavaBean的表
        //SQL语句
        String sql = "select * from " + tableName;
        try {
            ps = con.prepareStatement(sql);
            ResultSetMetaData rsmd = ps.getMetaData();
            //返回列数
            int size = rsmd.getColumnCount();
            colNames = new String[size];
            colTypes = new String[size];
            //得到列名和列类型
            for (int i = 0; i < size; i++) {
                //列名
                colNames[i] = rsmd.getColumnName(i + 1);
                //列数据库类型名
                colTypes[i] = rsmd.getColumnTypeName(i + 1);
            }
            //得到JavaBean代码
            String content = parse(colNames, colTypes);

            File directory = new File(packageOutPath + "\\" + tableName + "\\com\\bean");
            //创建目录
            directory.mkdirs();

            String outputPath = packageOutPath + "\\" + tableName + "\\com\\bean\\" + initcap(tableName) + ".java";
            PrintWriter pw = new PrintWriter(new FileWriter(outputPath));
            pw.println(content);

            pw.flush();
            pw.close();

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能:生成JavaBean代码
     *
     * @param colNames
     * @param colTypes
     * @return
     */
    private static String parse(String[] colNames, String[] colTypes) throws Exception {
        StringBuffer sb = new StringBuffer();

        sb.append("package " + tableName + ".com.bean" + ";\r\n");
        sb.append("\r\n");
        for (String colType : colTypes) {
            if ("Date".equals(sqlType2JavaType(colType))) {
                sb.append("import java.sql.Date;\r\n\r\n");
            }
        }
        sb.append("import java.io.Serializable;\r\n\r\n");
        //注释部分
        sb.append("\r\n/**\r\n");
        sb.append(" * Created by @author " + authorName + "\r\n");
        sb.append(" *\r\n");
        sb.append(" * @date " + new Date() + "\r\n");
        sb.append(" */ \r\n");
        //实体部分
        sb.append("\r\n\r\npublic class " + initcap(tableName) + " implements Serializable {\r\n");
        //属性
        processAllAttrs(sb);
        //get set方法
        processAllMethod(sb);
        sb.append("}\r\n");

        return sb.toString();
    }

    /**
     * 功能:生成属性
     *
     * @param sb
     */
    private static void processAllAttrs(StringBuffer sb) {

        for (int i = 0; i < colNames.length; i++) {
            try {
                //加上翻译
                //String translateResult = getTranslateResult(colNames[i]);
                sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colNames[i] + ";" + "\r\n");
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        sb.append("\r\n");
    }

    /**
     * 功能:生成set get方法
     *
     * @param sb
     */
    private static void processAllMethod(StringBuffer sb) {
        //无参 有参
        sb.append("\tpublic " + initcap(tableName) + "(){\r\n");
        sb.append("\t}\r\n\r\n");

        StringBuffer sb2 = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            sb2.append(sqlType2JavaType(colTypes[i]) + " " + colNames[i] + ",");
        }
        String s = sb2.toString();
        s = s.substring(0, s.length() - 1);
        sb.append("\tpublic " + initcap(tableName) + "(" + s + "){\r\n");
        StringBuffer sb3 = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            sb3.append("\t\tthis." + colNames[i] + " = " + colNames[i] + ";\r\n");
        }
        String s2 = sb3.toString();
        sb.append(s2);
        sb.append("\t}\r\n");

        //toString
        sb.append("\t@Override\r\n");
        sb.append("\tpublic " + "String toString(){\r\n\t\treturn ");
        StringBuffer sb4 = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            sb4.append("\"," + colNames[i] + "=\" + " + colNames[i] + " + \r\n\t\t");
        }
        String s3 = sb4.toString();
        s3 = s3.substring(0, 1) + s3.substring(2, s3.length() - 7) + ";";
        sb.append(s3);
        sb.append("\r\n\t}\r\n");

        //set get
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\tpublic void set" + initcap(colNames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " +
                    colNames[i] + "){\r\n");
            sb.append("\t\tthis." + colNames[i] + "=" + colNames[i] + ";\r\n");
            sb.append("\t}\r\n\r\n");
            sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colNames[i]) + "(){\r\n");
            sb.append("\t\treturn " + colNames[i] + ";\r\n");
            sb.append("\t}\r\n\r\n");
        }


    }

    /**
     * Dao
     * 功能:生成Dao接口 创建文件
     */
    public static void generateDao() {
        File directory = new File(packageOutPath + "\\" + tableName + "\\com\\dao");
        //创建目录
        directory.mkdirs();
        try {
            //代码
            String content = parseDao();
            String outputPath = packageOutPath + "\\" + tableName + "\\com\\dao\\" + daoName + ".java";
            FileWriter fw = new FileWriter(outputPath);
            PrintWriter pw = new PrintWriter(fw);
            pw.println(content);
            pw.flush();
            pw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 功能:生成Dao接口主体代码
     *
     * @param
     * @return
     * @throws Exception
     */
    private static String parseDao() {
        StringBuffer sb = new StringBuffer();
        sb.append("package " + tableName + ".com.dao;\r\n");
        sb.append("\r\n");
        sb.append("import " + tableName + ".com.bean." + initcap(tableName) + ";");
        sb.append("\r\n");
        sb.append("import com.util.Page;");
        sb.append("\r\n");
        sb.append("\r\n");
        sb.append("import java.util.List;");
        sb.append("\r\n");
        //注释部分
        sb.append("\r\n/**\r\n");
        sb.append(" * Created by @author " + authorName + "\r\n");
        sb.append(" *\r\n");
        sb.append(" * @date " + new Date() + "\r\n");
        sb.append(" */ \r\n");
        //实体部分
        sb.append("\r\n\r\npublic interface " + daoName + " {\r\n");
        //生成Dao所有方法
        processDaoAllMethod(sb);
        sb.append("}\r\n");

        return sb.toString();
    }

    /**
     * 功能:生成Dao接口的方法
     *
     * @param sb
     */
    private static void processDaoAllMethod(StringBuffer sb) {
        String[] str1 = {"增加", "删除", "修改", "查询所有", "根据列查询", "根据列查询范围", "分页查询", "查询数据总数"};
        String[] str2 = {"insert", "delete", "update", "selectAll", "selectAllByColumn", "selectAllByColumnScope", "findByPage", "findByPageCount"};

        for (int i = 0; i < str2.length; i++) {
            sb.append("\r\n");
            if ("selectAll".equals(str2[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */\r\n");
                sb.append("\tList " + str2[i] + "();");
            } else if ("selectAllByColumn".equals(str2[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param string 列名\r\n" +
                        "\t * @param value  列值\r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */\r\n");
                sb.append("\tList " + str2[i] + "(String string, String value);");
            } else if ("selectAllByColumnScope".equals(str2[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param string 列名\r\n" +
                        "\t * @param min    小值\r\n" +
                        "\t * @param max    大值\r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */\r\n");
                sb.append("\tList " + str2[i] + "(String string, String min, String max);");
            } else if ("findByPage".equals(str2[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param page 对象\r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */\r\n");
                sb.append("\tList " + str2[i] + "(Page page);");
            } else if ("findByPageCount".equals(str2[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @return Integer or null\r\n" +
                        "\t */\r\n");
                sb.append("\tInteger " + str2[i] + "();");
            } else {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param " + tableName + " 对象\r\n" +
                        "\t * @return Integer or null\r\n" +
                        "\t */\r\n");
                sb.append("\tInteger " + str2[i] + "(" + initcap(tableName) + " " + tableName + ");");
            }
            sb.append("\t\r\n");
        }

    }

    /**
     * 功能:生成DaoService接口实现
     */
    public static void generateDaoImpl() {
        File directory = new File(packageOutPath + "\\" + tableName + "\\com\\dao\\impl");
        //创建目录
        directory.mkdirs();
        try {
            //代码
            String content = parseDaoImpl(directory);
            String outputPath = packageOutPath + "\\" + tableName + "\\com\\dao\\impl\\" + daoImplName + ".java";
            FileWriter fw = new FileWriter(outputPath);
            PrintWriter pw = new PrintWriter(fw);
            pw.println(content);
            pw.flush();
            pw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能:生成daoimpl主体代码
     *
     * @param directory
     * @return
     */
    private static String parseDaoImpl(File directory) {
        StringBuffer sb = new StringBuffer();
        sb.append("package " + tableName + ".com.dao.impl;\r\n");
        sb.append("\r\n");
        sb.append("import java.util.List;");
        sb.append("\r\n");
        sb.append("import java.util.ArrayList;");
        sb.append("\r\n");
        sb.append("import java.sql.*;");
        sb.append("\r\n");
        sb.append("\r\n");
        sb.append("import " + tableName + ".com.bean." + initcap(tableName) + ";");
        sb.append("\r\n");
        sb.append("import " + tableName + ".com.dao." + daoName + ";");
        sb.append("\r\n");
        sb.append("import com.util.DbManGer;");
        sb.append("\r\n");
        sb.append("import com.util.Page;");
        sb.append("\r\n");
        sb.append("\r\n");
        //注释部分
        sb.append("\r\n/**\r\n");
        sb.append(" * Created by @author " + authorName + "\r\n");
        sb.append(" *\r\n");
        sb.append(" * @date " + new Date() + "\r\n");
        sb.append(" */ \r\n");
        //实体部分
        sb.append("\r\n\r\npublic class " + daoName + "Impl" + " implements " + daoName + " {\r\n");
        //生成Dao所有方法
        processDaoImplAllMethod(sb);
        sb.append("}\r\n");
        return sb.toString();
    }

    /**
     * 功能:生成Dao实现类方法
     *
     * @param sb
     * @param
     */
    private static void processDaoImplAllMethod(StringBuffer sb) {
        String[] str1 = {"增加", "删除", "修改", "查询所有", "根据列查询", "根据列查询范围", "分页查询", "查询数据总数"};
        String[] str2 = {"insert", "delete", "update", "selectAll", "selectAllByColumn", "selectAllByColumnScope", "findByPage", "findByPageCount"};
        for (int i = 0; i < str1.length; i++) {
            sb.append("\r\n");
            if ("增加".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param " + tableName + " 对象\r\n" +
                        "\t * @return Integer or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic Integer " + str2[i] + "(" + initcap(tableName) + " " + tableName + ") {\r\n");
                daoImplInsert(sb);
                sb.append("\t}\r\n");
            } else if ("删除".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param " + tableName + " 对象\r\n" +
                        "\t * @return Integer or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic Integer " + str2[i] + "(" + initcap(tableName) + " " + tableName + ") {\r\n");
                daoImplDelete(sb);
                sb.append("\t}\r\n");
            } else if ("修改".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param " + tableName + " 对象\r\n" +
                        "\t * @return Integer or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic Integer " + str2[i] + "(" + initcap(tableName) + " " + tableName + ") {\r\n");
                daoImplUpdate(sb);
                sb.append("\t}\r\n");
            } else if ("查询所有".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic List " + str2[i] + "() {\r\n");
                daoImplSelectAll(sb);
                sb.append("\t}\r\n");
            } else if ("根据列查询".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * 根据列查询\r\n" +
                        "\t *\r\n" +
                        "\t * @param string 列名\r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */");
                sb.append("\r\r\n\t@Override\r\r\n");
                sb.append("\tpublic List " + str2[i] + "(String string,String value) {\r\n");
                daoImplSelectAllByColumn(sb);
                sb.append("\t}\r\n");
            } else if ("根据列查询范围".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * 根据列查询范围\r\n" +
                        "\t *\r\n" +
                        "\t * @param string 列名\r\n" +
                        "\t * @param min\t小值\r\n" +
                        "\t * @param max\t大值\r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic List " + str2[i] + "(String string, String min, String max) {\r\n");
                daoImplSelectAllByColumnScope(sb);
                sb.append("\t}\r\n");
            } else if ("分页查询".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @param page 对象\r\n" +
                        "\t * @return List or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic List " + str2[i] + "(Page page) {\r\n");
                daoImplfindByPage(sb);
                sb.append("\t}\r\n");
            } else if ("查询数据总数".equals(str1[i])) {
                sb.append("\t/**\r\n" +
                        "\t * " + str1[i] + "\r\n" +
                        "\t * \r\n" +
                        "\t * @return Integer or null\r\n" +
                        "\t */");
                sb.append("\r\n\t@Override\r\n");
                sb.append("\tpublic Integer " + str2[i] + "() {\r\n");
                daoImplfindByPageCount(sb);
                sb.append("\t}\r\n");
            }
            sb.append("\t\r\n");
        }
    }

    /**
     * 分页总条数
     *
     * @param sb
     */
    private static void daoImplfindByPageCount(StringBuffer sb) {
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"SELECT CAST( COUNT(*) AS CHAR ) AS COUNT");
        sb.append(" FROM " + tableName + " \";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("ResultSet rs = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");
        sb.append("\r\n\t\t\t");
        sb.append("rs = ps.executeQuery();");

        sb.append("\r\n\t\t\t");
        sb.append("while (rs.next()) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("return Integer.parseInt(rs.getString(\"COUNT\"));");
        sb.append("\r\n\t\t\t");
        sb.append("}");

        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("rs.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("return null;\r\n");
    }

    /**
     * 分页查询
     *
     * @param sb
     */
    private static void daoImplfindByPage(StringBuffer sb) {
        sb.append("\t\tList<" + initcap(tableName) + "> list = new ArrayList<>();\r\n");
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"SELECT ");
        StringBuffer temporary = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary.append(colNames[i] + ",");
        }
        sb.append(temporary.substring(0, temporary.length() - 1));
        sb.append(" FROM " + tableName + " limit ?,? \";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("ResultSet rs = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");
        sb.append("\r\n\t\t\t");
        sb.append("ps.setInt(1, ((page.getCurrentPage() - 1) * page.getPageSize()));");
        sb.append("\r\n\t\t\t");
        sb.append("ps.setInt(2, page.getPageSize());");
        sb.append("\r\n\t\t\t");
        sb.append("rs = ps.executeQuery();");

        sb.append("\r\n\t\t\t");
        sb.append("while (rs.next()) {");
        sb.append("\r\n\t\t\t\t");
        sb.append(initcap(tableName) + " " + tableName + " = new " + initcap(tableName) + "();");
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\r\n\t\t\t\t");
            sb.append(tableName + ".set" + initcap(colNames[i]) + "(rs.get" + initcap(sqlType2JavaType(colTypes[i])) + "(\"" + colNames[i] + "\"));");
        }
        sb.append("\r\n\t\t\t\t");
        sb.append("list.add(" + tableName + ");");
        sb.append("\r\n\t\t\t");
        sb.append("}");

        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("rs.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("return list;\r\n");
    }

    /**
     * 增加
     *
     * @param sb
     */
    private static void daoImplInsert(StringBuffer sb) {
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"INSERT INTO " + tableName + " (");
        StringBuffer temporary = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary.append(colNames[i] + ",");
        }
        sb.append(temporary.substring(0, temporary.length() - 1));
        sb.append(")VALUES (");
        StringBuffer temporary2 = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary2.append("?,");
        }
        sb.append(temporary2.substring(0, temporary2.length() - 1) + ")\";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\r\n\t\t\t");
            sb.append("ps.set" + initcap(sqlType2JavaType(colTypes[i])) + "(" + (i + 1) + ", " + tableName + ".get" + initcap(colNames[i]) + "());");
        }
        sb.append("\r\n\t\t\t");
        sb.append("return ps.executeUpdate();");
        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}\r\n\t\t}\r\n\t\treturn null;\r\n");
    }

    /**
     * 删除
     *
     * @param sb
     */
    private static void daoImplDelete(StringBuffer sb) {
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"DELETE FROM " + tableName + " WHERE " + colNames[0] + " = ?\";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");

        sb.append("\r\n\t\t\t");
        sb.append("ps.set" + initcap(sqlType2JavaType(colTypes[0])) + "(" + (0 + 1) + ", " + tableName + ".get" + initcap(colNames[0]) + "());");

        sb.append("\r\n\t\t\t");
        sb.append("return ps.executeUpdate();");
        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}\r\n\t\t}\r\n\t\treturn null;\r\n");
    }

    /**
     * 修改
     *
     * @param sb
     */
    private static void daoImplUpdate(StringBuffer sb) {
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"UPDATE " + tableName + " SET ");
        StringBuffer temporary = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary.append(colNames[i] + " = ?,");
        }
        sb.append(temporary.substring(0, temporary.length() - 1) + " WHERE " + colNames[0] + " = ?\";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");

        for (int i = 0; i < colNames.length; i++) {
            sb.append("\r\n\t\t\t");
            sb.append("ps.set" + initcap(sqlType2JavaType(colTypes[i])) + "(" + (i + 1) + ", " + tableName + ".get" + initcap(colNames[i]) + "());");
        }
        sb.append("\r\n\t\t\t");
        sb.append("ps.set" + initcap(sqlType2JavaType(colTypes[0])) + "(" + (colNames.length + 1) + ", " + tableName + ".get" + initcap(colNames[0]) + "());");

        sb.append("\r\n\t\t\t");
        sb.append("return ps.executeUpdate();");
        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}\r\n\t\t}\r\n\t\treturn null;\r\n");
    }

    /**
     * 查询所有
     *
     * @param sb
     */
    private static void daoImplSelectAll(StringBuffer sb) {
        sb.append("\t\tList<" + initcap(tableName) + "> list = new ArrayList<>();\r\n");
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"SELECT ");
        StringBuffer temporary = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary.append(colNames[i] + ",");
        }
        sb.append(temporary.substring(0, temporary.length() - 1));
        sb.append(" FROM " + tableName + "\";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("ResultSet rs = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");
        sb.append("\r\n\t\t\t");
        sb.append("rs = ps.executeQuery();");

        sb.append("\r\n\t\t\t");
        sb.append("while (rs.next()) {");
        sb.append("\r\n\t\t\t\t");
        sb.append(initcap(tableName) + " " + tableName + " = new " + initcap(tableName) + "();");
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\r\n\t\t\t\t");
            sb.append(tableName + ".set" + initcap(colNames[i]) + "(rs.get" + initcap(sqlType2JavaType(colTypes[i])) + "(\"" + colNames[i] + "\"));");
        }
        sb.append("\r\n\t\t\t\t");
        sb.append("list.add(" + tableName + ");");
        sb.append("\r\n\t\t\t");
        sb.append("}");

        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("rs.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("return list;\r\n");
    }

    /**
     * 根据列查询
     *
     * @param sb
     */
    private static void daoImplSelectAllByColumn(StringBuffer sb) {
        sb.append("\t\tList<" + initcap(tableName) + "> list = new ArrayList<>();\r\n");
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql = \"SELECT ");
        StringBuffer temporary = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary.append(colNames[i] + ",");
        }
        sb.append(temporary.substring(0, temporary.length() - 1));
        sb.append(" FROM " + tableName + " WHERE \"+string+\" = ? \";");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("ResultSet rs = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");
        sb.append("\r\n\t\t\t");
        sb.append("ps.setString(1,value);");
        sb.append("\r\n\t\t\t");
        sb.append("rs = ps.executeQuery();");

        sb.append("\r\n\t\t\t");
        sb.append("while (rs.next()) {");
        sb.append("\r\n\t\t\t\t");
        sb.append(initcap(tableName) + " " + tableName + " = new " + initcap(tableName) + "();");
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\r\n\t\t\t\t");
            sb.append(tableName + ".set" + initcap(colNames[i]) + "(rs.get" + initcap(sqlType2JavaType(colTypes[i])) + "(\"" + colNames[i] + "\"));");
        }
        sb.append("\r\n\t\t\t\t");
        sb.append("list.add(" + tableName + ");");
        sb.append("\r\n\t\t\t");
        sb.append("}");

        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("rs.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("return list;\r\n");
    }

    /**
     * 根据列查询范围
     *
     * @param sb
     */
    private static void daoImplSelectAllByColumnScope(StringBuffer sb) {
        sb.append("\t\tList<" + initcap(tableName) + "> list = new ArrayList<>();\r\n");
        //获取连接
        sb.append("\t\tConnection con = " + getConn + "\r\n");
        sb.append("\t\tString sql;\r\n");
        sb.append("\t\tif (min == null && min == \"\") {\r\n" +
                "\t\t\tmin = \"0\";\r\n" +
                "\t\t}\r\n");
        sb.append("\t\tif (max != null && max != \"\") {\r\n");
        sb.append("\t\t\tsql = \"SELECT ");
        StringBuffer temporary = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary.append(colNames[i] + ",");
        }
        sb.append(temporary.substring(0, temporary.length() - 1));
        sb.append(" FROM " + tableName + " WHERE \" + string + \" BETWEEN \" + min + \" AND \" + max + \" \";");
        sb.append("\r\n\t\t} else {\r\n");
        sb.append("\t\t\tsql = \"SELECT ");
        StringBuffer temporary2 = new StringBuffer();
        for (int i = 0; i < colNames.length; i++) {
            temporary2.append(colNames[i] + ",");
        }
        sb.append(temporary2.substring(0, temporary2.length() - 1));
        sb.append(" FROM " + tableName + " WHERE \" + string + \" >= \" + min + \" \";");
        sb.append("\r\n\t\t}");
        sb.append("\r\n\t\t");
        sb.append("PreparedStatement ps = null;");
        sb.append("\r\n\t\t");
        sb.append("ResultSet rs = null;");
        sb.append("\r\n\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t");
        sb.append("ps = con.prepareStatement(sql);");
        sb.append("\r\n\t\t\t");
        sb.append("rs = ps.executeQuery();");

        sb.append("\r\n\t\t\t");
        sb.append("while (rs.next()) {");
        sb.append("\r\n\t\t\t\t");
        sb.append(initcap(tableName) + " " + tableName + " = new " + initcap(tableName) + "();");
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\r\n\t\t\t\t");
            sb.append(tableName + ".set" + initcap(colNames[i]) + "(rs.get" + initcap(sqlType2JavaType(colTypes[i])) + "(\"" + colNames[i] + "\"));");
        }
        sb.append("\r\n\t\t\t\t");
        sb.append("list.add(" + tableName + ");");
        sb.append("\r\n\t\t\t");
        sb.append("}");

        sb.append("\r\n\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t");
        sb.append("} finally {");
        sb.append("\r\n\t\t\t");
        sb.append("try {");
        sb.append("\r\n\t\t\t\t");
        sb.append("rs.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("ps.close();");
        sb.append("\r\n\t\t\t\t");
        sb.append("con.close();");
        sb.append("\r\n\t\t\t");
        sb.append("} catch (SQLException e) {");
        sb.append("\r\n\t\t\t\t");
        sb.append("e.printStackTrace();");
        sb.append("\r\n\t\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("}");
        sb.append("\r\n\t\t");
        sb.append("return list;\r\n");
    }

    /**
     * 功能:生成Service 和 ServiceImpl
     */
    private static void generateService() {
        File directory = new File(packageOutPath + "\\" + tableName + "\\com\\service");
        directory.mkdirs();//创建目录
        try {

            String outputPath = packageOutPath + "\\" + tableName + "\\com\\service\\" + serviceName + ".java";
            FileWriter fw = new FileWriter(outputPath);
            PrintWriter pw = new PrintWriter(fw);
            //代码
            //String content = parseDao();
            StringBuffer sb = new StringBuffer();
            sb.append("package " + tableName + ".com.service;\r\n");
            sb.append("\r\n");
            sb.append("import " + tableName + ".com.bean." + initcap(tableName) + ";");
            sb.append("\r\n");
            sb.append("import com.util.Page;");
            sb.append("\r\n");
            sb.append("\r\n");
            sb.append("import java.util.List;");
            sb.append("\r\n");
            //注释部分
            sb.append("\r\n/**\r\n");
            sb.append(" * Created by @author " + authorName + "\r\n");
            sb.append(" *\r\n");
            sb.append(" * @date " + new Date() + "\r\n");
            sb.append(" */ \r\n");
            //实体部分
            sb.append("\r\n\r\npublic interface " + serviceName + " {\r\n");
            String[] str1 = {"增加", "删除", "修改", "查询所有", "根据列查询", "根据列查询范围", "分页查询"};
            String[] str2 = {"insert", "delete", "update", "selectAll", "selectAllByColumn", "selectAllByColumnScope", "findByPage"};

            for (int i = 0; i < str2.length; i++) {
                sb.append("\r\n");
                if ("selectAll".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */\r\n");
                    sb.append("\tList " + str2[i] + "();");
                } else if ("selectAllByColumn".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @param string 列名\r\n" +
                            "\t * @param value  列值\r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */\r\n");
                    sb.append("\tList " + str2[i] + "(String string, String value);");
                } else if ("selectAllByColumnScope".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @param string 列名\r\n" +
                            "\t * @param min    小值\r\n" +
                            "\t * @param max    大值\r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */\r\n");
                    sb.append("\tList " + str2[i] + "(String string, String min, String max);");
                } else if ("findByPage".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @param page 对象\r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */\r\n");
                    sb.append("\tList " + str2[i] + "(Page page);");
                } else {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @param " + tableName + " 对象\r\n" +
                            "\t * @return Integer or null\r\n" +
                            "\t */\r\n");
                    sb.append("\tInteger " + str2[i] + "(" + initcap(tableName) + " " + tableName + ");");
                }
                sb.append("\t\r\n");
            }
            sb.append("}\r\n");
            //************************************************************************
            pw.println(sb.toString());
            pw.flush();
            pw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能:生成ServiceImpl
     */
    private static void generateServiceImpl() {
        File directory = new File(packageOutPath + "\\" + tableName + "\\com\\service\\impl");
        directory.mkdirs();//创建目录

        try {
            String outputPath = packageOutPath + "\\" + tableName + "\\com\\service\\impl\\" + serviceImplName + ".java";
            FileWriter fw = new FileWriter(outputPath);
            PrintWriter pw = new PrintWriter(fw);
            //代码****************************************
            StringBuffer sb = new StringBuffer();
            sb.append("package " + tableName + ".com.service.impl;\r\n");
            sb.append("\r\n");
            sb.append("import java.util.List;");
            sb.append("\r\n");
            sb.append("\r\n");
            sb.append("import com.util.Page;");
            sb.append("\r\n");
            sb.append("import " + tableName + ".com.dao." + daoName + ";");
            sb.append("\r\n");
            sb.append("import " + tableName + ".com.dao.impl." + daoImplName + ";");
            sb.append("\r\n");
            sb.append("import " + tableName + ".com.service." + serviceName + ";");
            sb.append("\r\n");
            sb.append("import " + tableName + ".com.bean." + initcap(tableName) + ";");
            sb.append("\r\n");
            sb.append("\r\n");
            //注释部分
            sb.append("\r\n/**\r\n");
            sb.append(" * Created by @author " + authorName + "\r\n");
            sb.append(" *\r\n");
            sb.append(" * @date " + new Date() + "\r\n");
            sb.append(" */ \r\n");
            //实体部分
            sb.append("\r\n\r\npublic class " + serviceImplName + " implements " + serviceName + " {\r\n");
            String[] str1 = {"增加", "删除", "修改", "查询所有", "根据列查询", "根据列查询范围", "分页查询"};
            String[] str2 = {"insert", "delete", "update", "selectAll", "selectAllByColumn", "selectAllByColumnScope", "findByPage"};
            sb.append("\tprivate static " + daoName + " " + tableName + "DaoImpl = new " + daoImplName + "();\r\n");
            for (int i = 0; i < str2.length; i++) {
                sb.append("\r\n");
                if ("selectAllByColumn".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * 根据列查询\r\n" +
                            "\t *\r\n" +
                            "\t * @param string 列名\r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */");
                    sb.append("\r\r\n\t@Override\r\r\n");
                    sb.append("\tpublic List " + str2[i] + "(String string,String value) {\r\n\t\t");
                    sb.append("return " + tableName + "DaoImpl." + str2[i] + "(string, value);");
                    sb.append(" \r\n\t}\r\n");
                } else if ("selectAllByColumnScope".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * 根据列查询范围\r\n" +
                            "\t *\r\n" +
                            "\t * @param string 列名\r\n" +
                            "\t * @param min\t小值\r\n" +
                            "\t * @param max\t大值\r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */");
                    sb.append("\r\n\t@Override\r\n");
                    sb.append("\tpublic List " + str2[i] + "(String string, String min, String max) {\r\n\t\t");
                    sb.append("return " + tableName + "DaoImpl." + str2[i] + "(string, min, max);");
                    sb.append(" \r\n\t}\r\n");
                } else if ("selectAll".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */");
                    sb.append("\r\n\t@Override\r\n");
                    sb.append("\tpublic List " + str2[i] + "() { \r\n\t\t");
                    sb.append("return " + tableName + "DaoImpl." + str2[i] + "();");
                    sb.append(" \r\n\t}\r\n");
                } else if ("findByPage".equals(str2[i])) {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @param page 对象\r\n" +
                            "\t * @return List or null\r\n" +
                            "\t */");
                    sb.append("\r\n\t@Override\r\n");
                    sb.append("\tpublic List " + str2[i] + "(Page page) {\r\n");
                    serviceImplFindByPage(sb);
                    sb.append("\t}\r\n");
                } else {
                    sb.append("\t/**\r\n" +
                            "\t * " + str1[i] + "\r\n" +
                            "\t * \r\n" +
                            "\t * @param " + tableName + " 对象\r\n" +
                            "\t * @return Integer or null\r\n" +
                            "\t */");
                    sb.append("\r\n\t@Override\r\n");
                    sb.append("\tpublic Integer " + str2[i] + "(" + initcap(tableName) + " " + tableName + ") { \r\n\t\t");
                    sb.append("return " + tableName + "DaoImpl." + str2[i] + "(" + tableName + ");");
                    sb.append("\r\n\t}\r\n");
                }
                sb.append("\t\r\n");
            }
            sb.append("}\r\n");
            //***********************************************************************************
            pw.println(sb.toString());
            pw.flush();
            pw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void serviceImplFindByPage(StringBuffer sb) {
        sb.append("\t\t// 查询总数据条数\r\n");
        sb.append("\t\tpage.setTotalCount(" + tableName + "DaoImpl.findByPageCount());\r\n");
        sb.append("\t\t// 计算总页数\r\n" +
                "\t\tint totalPage = 0;\r\n" +
                "\t\ttotalPage = page.getTotalCount() % page.getPageSize() == 0 ? page.getTotalCount() / page.getPageSize() : page.getTotalCount() / page.getPageSize() + 1;\r\n" +
                "\t\tpage.setTotalPage(totalPage);\r\n" +
                "\t\t// begin 与 end\r\n" +
                "\t\tint Begin = 0, end = 0;\r\n" +
                "\t\tif (page.getTotalPage() <= 10) {\r\n" +
                "\t\t\tBegin = 1;\r\n" +
                "\t\t\tend = (page.getTotalPage());\r\n" +
                "\t\t} else if (page.getCurrentPage() <= 5) {\r\n" +
                "\t\t\tBegin = 1;\r\n" +
                "\t\t\tend = 10;\r\n" +
                "\t\t} else if (page.getCurrentPage() >= page.getTotalPage() - 5) {\r\n" +
                "\t\t\tBegin = page.getTotalPage() - 9;\r\n" +
                "\t\t\tend = page.getTotalPage();\r\n" +
                "\t\t} else {\r\n" +
                "\t\t\tBegin = page.getCurrentPage() - 4;\r\n" +
                "\t\t\tend = page.getCurrentPage() + 5;\r\n" +
                "\t\t}\r\n" +
                "\t\tpage.setBegin(Begin);\r\n" +
                "\t\tpage.setEnd(end);\r\n");
        sb.append("\t\treturn " + tableName + "DaoImpl.findByPage(page);\r\n");
    }

    /**
     * 功能生成Servlet controller
     */
    private static void generateServlet() {
        File directory = new File(packageOutPath + "\\" + tableName + "\\com\\controller");
        directory.mkdirs();//创建目录
        try {
            //String content = parseDao();
            String outputPath = packageOutPath + "\\" + tableName + "\\com\\controller\\" + servletName + ".java";
            FileWriter fw = new FileWriter(outputPath);
            PrintWriter pw = new PrintWriter(fw);
            //代码****************************************
            StringBuffer sb = new StringBuffer();
            sb.append("package " + tableName + ".com.controller;\r\n");
            sb.append("\r\n");
            sb.append("import " + tableName + ".com.bean." + initcap(tableName) + ";\r\n" +
                    "import " + tableName + ".com.service." + serviceName + ";\r\n" +
                    "import " + tableName + ".com.service.impl." + serviceImplName + ";\r\n" +
                    "import com.util.Page;\r\n" +
                    "\r\n" +
                    "import javax.servlet.ServletException;\r\n" +
                    "import javax.servlet.annotation.WebServlet;\r\n" +
                    "import javax.servlet.http.HttpServlet;\r\n" +
                    "import javax.servlet.http.HttpServletRequest;\r\n" +
                    "import javax.servlet.http.HttpServletResponse;\r\n" +
                    "import java.io.IOException;\r\n" +
                    "import java.io.PrintWriter;\r\n" +
                    "import java.sql.Date;\r\n" +
                    "import java.util.List;");
            sb.append("\r\n");
            sb.append("\r\n");
            //注释部分
            sb.append("\r\n/**\r\n");
            sb.append(" * Created by @author " + authorName + "\r\n");
            sb.append(" *\r\n");
            sb.append(" * @date " + new Date() + "\r\n");
            sb.append(" */ \r\n");
            sb.append("@WebServlet(name = \"" + servletName + "\", urlPatterns = \"/" + servletName + "\")\r\n");
            //实体部分
            sb.append("public class " + servletName + " extends HttpServlet {\r\n\r\n");
            servletEntityPortion(sb);
            sb.append("}");
            //***********************************************************************************
            pw.println(sb.toString());
            pw.flush();
            pw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * servlet 实体部分代码
     *
     * @param sb sb
     */
    private static void servletEntityPortion(StringBuffer sb) {
        sb.append("\t/**\r\n" +
                "\t * " + serviceName + " " + tableName + "ServiceImpl 增删改查 查Name 分页查询\r\n" +
                "\t */\r\n" +
                "\tprivate static " + serviceName + " " + tableName + "ServiceImpl = new " + serviceImplName + "();\r\n" +
                "\r\n" +
                "\t@Override\r\n" +
                "\tprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {");
        sb.append("// 请求对象编码规则\r\n" +
                "\t\trequest.setCharacterEncoding(\"utf-8\");\r\n" +
                "\t\t// 获取数据\r\n" +
                "\t\tString label = request.getParameter(\"label\");\r\n" +
                "\t\t// 跳转的页面\r\n" +
                "\t\tString goToURL = \"" + tableName + ".jsp\";\r\n" +
                "\t\t// 设置回传的对象编码规则\r\n" +
                "\t\tresponse.setContentType(\"text/html;charset=utf-8\");\r\n" +
                "\t\t// 字符类型标准打印输出流,继承Write\r\n" +
                "\t\tPrintWriter pw = response.getWriter();\r\n" +
                "\t\t// 获取对象\r\n" +
                "\t\t" + initcap(tableName) + " " + tableName + " = gettingData(request);\r\n" +
                "\r\n" +
                "\t\t// 数据数组\n" +
                "\t\tList list = null;\n" +
                "\t\t// 分页数据对象\n" +
                "\t\tPage page = new Page();\n" +
                "\n" +
                "\t\t// 查询\n" +
                "\t\tif (\"selectAll\".equals(label)) {\n" +
                "\t\t\tlist = selectAll();\n" +
                "\t\t}\n" +
                "\t\t// 根据列名查询\n" +
                "\t\telse if (\"selectAllByColumn\".equals(label)) {\n" +
                "\t\t\tString columnName = request.getParameter(\"columnName\");\n" +
                "\t\t\tString columnValue = request.getParameter(\"columnValue\");\n" +
                "\t\t\tlist = selectAllByColumn(columnName, columnValue);\n" +
                "\t\t}\n" +
                "\t\t// 根据列名查询范围\n" +
                "\t\telse if (\"selectAllByColumnScope\".equals(label)) {\n" +
                "\t\t\tString columnName = request.getParameter(\"columnName\");\n" +
                "\t\t\tString minValue = request.getParameter(\"minValue\");\n" +
                "\t\t\tString maxValue = request.getParameter(\"maxValue\");\n" +
                "\t\t\tlist = selectAllByColumnScope(columnName, minValue, maxValue);\n" +
                "\t\t}\n" +
                "\t\t// 分页显示\n" +
                "\t\telse if (\"findByPage\".equals(label)) {\n" +
                "\t\t\tpage = page(page, request);\n" +
                "\t\t\tlist = findByPage(page);\n" +
                "\t\t}\n" +
                "\t\t// return list or null\n" +
                "\t\tif (list != null) {\n" +
                "\t\t\trequest.setAttribute(\"page\", page);\n" +
                "\t\t\trequest.setAttribute(\"list\", list);\n" +
                "\t\t\trequest.getRequestDispatcher(goToURL).forward(request, response);\n" +
                "\t\t}\n" +
                "\n" +
                "\n" +
                "\t\t// AJAX 回传的字符串\n" +
                "\t\tString pwStr = null;\n" +
                "\t\t// 增加\n" +
                "\t\tif (\"insert\".equals(label)) {\n" +
                "\t\t\tpwStr = insert("+tableName+");\n" +
                "\t\t}\n" +
                "\t\t// 删除\n" +
                "\t\telse if (\"delete\".equals(label)) {\n" +
                "\t\t\tpwStr = delete("+tableName+");\n" +
                "\t\t}\n" +
                "\t\t// 修改\n" +
                "\t\telse if (\"update\".equals(label)) {\n" +
                "\t\t\tpwStr = update("+tableName+");\n" +
                "\t\t}\n" +
                "\t\t// return str or null\n" +
                "\t\tif (pwStr != null) {\n" +
                "\t\t\tpw.write(pwStr);\n" +
                "\t\t\tpw.close();\n" +
                "\t\t}" +
                "\t}\r\n\r\n");
        String[] str1 = {"增加", "删除", "修改", "查询所有", "根据列名查询","根据列查询范围", "分页显示"};
        String[] str2 = {"insert", "delete", "update", "selectAll", "selectAllByColumn","selectAllByColumnScope", "findByPage"};
        for (int i = 0; i < str2.length; i++) {
            if ("selectAll".equals(str2[i])) {
                sb.append("\t/**\n" +
                        "\t * 查询所有\n" +
                        "\t *\n" +
                        "\t * @return list or null\n" +
                        "\t */\n" +
                        "\tprivate List selectAll() {\n" +
                        "\t\tList list = "+tableName+"ServiceImpl.selectAll();\n" +
                        "\t\tif (list.size() != 0) {\n" +
                        "\t\t\treturn list;\n" +
                        "\t\t} else {\n" +
                        "\t\t\treturn null;\n" +
                        "\t\t}\n" +
                        "\t}\r\n\r\n");
            } else if ("selectAllByColumn".equals(str2[i])) {
                sb.append("\t/**\n" +
                        "\t * 根据列名查询\n" +
                        "\t *\n" +
                        "\t * @param columnName  列名\n" +
                        "\t * @param columnValue 列值\n" +
                        "\t * @return list or null\n" +
                        "\t */\n" +
                        "\tprivate List selectAllByColumn(String columnName, String columnValue) {\n" +
                        "\t\tList list = "+tableName+"ServiceImpl.selectAllByColumn(columnName, columnValue);\n" +
                        "\t\tif (list.size() != 0) {\n" +
                        "\t\t\treturn list;\n" +
                        "\t\t} else {\n" +
                        "\t\t\treturn null;\n" +
                        "\t\t}\n" +
                        "\t}\r\n\r\n");
            }  else if ("selectAllByColumnScope".equals(str2[i])) {
                sb.append("\t/**\n" +
                        "\t * 根据列查询范围\n" +
                        "\t *\n" +
                        "\t * @param columnName 列名\n" +
                        "\t * @param minValue   小值\n" +
                        "\t * @param maxValue   大值\n" +
                        "\t * @return List\n" +
                        "\t */\n" +
                        "\tprivate List selectAllByColumnScope(String columnName, String minValue, String maxValue) {\n" +
                        "\t\tList list = "+tableName+"ServiceImpl.selectAllByColumnScope(columnName, minValue, maxValue);\n" +
                        "\t\tif (list.size() != 0) {\n" +
                        "\t\t\treturn list;\n" +
                        "\t\t} else {\n" +
                        "\t\t\treturn null;\n" +
                        "\t\t}\n" +
                        "\t}\r\n\r\n");
            } else if ("findByPage".equals(str2[i])) {
                sb.append("\t/**\n" +
                        "\t * 分页显示\n" +
                        "\t *\n" +
                        "\t * @param page 对象\n" +
                        "\t * @return list or null\n" +
                        "\t */\n" +
                        "\tprivate List findByPage(Page page) {\n" +
                        "\t\tList list = "+tableName+"ServiceImpl.findByPage(page);\n" +
                        "\t\tif (list.size() != 0) {\n" +
                        "\t\t\treturn list;\n" +
                        "\t\t} else {\n" +
                        "\t\t\treturn null;\n" +
                        "\t\t}\n" +
                        "\t}\r\n\r\n");
            } else {
                sb.append("\t/**\n" +
                        "\t * "+str1[i]+"\n" +
                        "\t *\n" +
                        "\t * @param "+tableName+" 对象\n" +
                        "\t * @return String or null\n" +
                        "\t */\n" +
                        "\tprivate String "+str2[i]+"("+initcap(tableName)+" "+tableName+") {\n" +
                        "\t\tInteger update = "+tableName+"ServiceImpl.update("+tableName+");\n" +
                        "\t\tif (update != null) {\n" +
                        "\t\t\treturn \""+str1[i]+"成功\";\n" +
                        "\t\t} else {\n" +
                        "\t\t\treturn null;\n" +
                        "\t\t}\n" +
                        "\t}\r\n\r\n");
            }
        }
        sb.append("\t/**\n" +
                "\t * 获取request的值\n" +
                "\t *\n" +
                "\t * @param request 数据\n" +
                "\t * @return " + initcap(tableName) + " 对象\n" +
                "\t */\n" +
                "\tprivate " + initcap(tableName) + " gettingData(HttpServletRequest request) {\r\n");
        sb.append("\t\t// 获取数据\r\n");
        for (String colName : colNames) {
            sb.append("\t\tString " + colName + " = request.getParameter(\"" + colName + "\");\r\n");
        }
        sb.append("\t\t// 创建对象并赋值\r\n");
        sb.append("\t\t" + initcap(tableName) + " " + tableName + " = new " + initcap(tableName) + "();\r\n");

        for (int i = 0; i < colNames.length; i++) {
            sb.append("\t\t");
            if ("int".equals(sqlType2JavaType(colTypes[i]))) {
                sb.append("if (" + colNames[i] + " != null) {\r\n\t\t\t" + tableName + ".set" + initcap(colNames[i]) + "(Integer.parseInt(" + colNames[i] + "));\r\n\t\t}");
            } else if ("double".equals(sqlType2JavaType(colTypes[i]))) {
                sb.append("if (" + colNames[i] + " != null) {\r\n\t\t\t" + tableName + ".set" + initcap(colNames[i]) + "(Double.parseDouble(" + colNames[i] + "));\r\n\t\t}");
            } else if ("Date".equals(sqlType2JavaType(colTypes[i]))) {
                sb.append("if (" + colNames[i] + " != null) {\r\n\t\t\t" + tableName + ".set" + initcap(colNames[i]) + "(Date.valueOf(" + colNames[i] + "));\r\n\t\t}");
            } else {
                sb.append("if (" + colNames[i] + " != null) {\r\n\t\t\t" + tableName + ".set" + initcap(colNames[i]) + "(" + colNames[i] + ");\r\n\t\t}");
            }
            sb.append("\r\n");
        }
        sb.append("\t\treturn " + tableName + ";\r\n");
        sb.append("\t}\r\n\r\n");
        sb.append("\t/**\r\n" +
                "\t * 分页\r\n" +
                "\t *\r\n" +
                "\t * @param page 分页数据对象\r\n" +
                "\t * @param request 获取数据\r\n" +
                "\t * @return Page 分页数据对象\r\n" +
                "\t */\r\n" +
                "\tprivate static Page page(Page page, HttpServletRequest request) {\r\n" +
                "\t\t// 获取分页数据\r\n" +
                "\t\tString currentPage = request.getParameter(\"currentPage\");\r\n" +
                "\t\tString pageSize = request.getParameter(\"pageSize\");\r\n" +
                "\t\t// 判断\r\n" +
                "\t\tif (currentPage == null) {\r\n" +
                "\t\t\tpage.setCurrentPage(1);\r\n" +
                "\t\t} else {\r\n" +
                "\t\t\tpage.setCurrentPage(Integer.parseInt(currentPage));\r\n" +
                "\t\t}\r\n" +
                "\t\tif (pageSize == null) {\r\n" +
                "\t\t\tpage.setPageSize(10);\r\n" +
                "\t\t} else {\r\n" +
                "\t\t\tpage.setPageSize(Integer.parseInt(pageSize));\r\n" +
                "\t\t}\r\n" +
                "\t\treturn page;\r\n" +
                "\t}\r\n" +
                "\r\n" +
                "\t@Override\r\n" +
                "\tprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n" +
                "\t\tdoPost(request, response);\r\n" +
                "\t}\r\n");
    }

    /*************************************
     * 功能:将输入字符串的首字母改成大写
     *
     * @param str
     * @return
     */
    private static String initcap(String str) {

        char[] ch = str.toCharArray();
        char a = 'a';
        char z = 'z';
        if (ch[0] >= a && ch[0] <= z) {
            ch[0] = (char) (ch[0] - 32);
        }

        return new String(ch);
    }

    /**
     * 功能:获得列的数据类型
     *
     * @param sqlType
     * @return
     */
    private static String sqlType2JavaType(String sqlType) {
        if (sqlType.equalsIgnoreCase("bit")) {
            return "boolean";
        } else if (sqlType.equalsIgnoreCase("tinyint")) {
            return "byte";
        } else if (sqlType.equalsIgnoreCase("smallint")) {
            return "short";
        } else if (sqlType.equalsIgnoreCase("int")) {
            return "int";
        } else if (sqlType.equalsIgnoreCase("bigint")) {
            return "long";
        } else if (sqlType.equalsIgnoreCase("float")) {
            return "float";
        } else if (sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("double") || sqlType.equalsIgnoreCase("numeric")
                || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")
                || sqlType.equalsIgnoreCase("smallmoney")) {
            return "double";
        } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")
                || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")
                || sqlType.equalsIgnoreCase("text")) {
            return "String";
        } else if (sqlType.equalsIgnoreCase("datetime") || sqlType.equalsIgnoreCase("date")) {
            return "Date";
        } else if (sqlType.equalsIgnoreCase("image")) {
            return "Blod";
        } else if (sqlType.equalsIgnoreCase("Timestamp")) {
            return "Timestamp";
        }

        return null;
    }

//    /**
//     * 功能:翻译字符串
//     *
//     * @param urlString
//     * @return
//     * @throws Exception
//     */
//    private static String getTranslateResult(String urlString) throws Exception {
//        final String PreUrl = "http://www.baidu.com/s?wd=";                        //百度搜索URL
//        final String TransResultStartFlag = "";      //翻译开始标签
//        final String TransResultEndFlag = "";                               //翻译结束标签
//        URL url = new URL(PreUrl + urlString);            //生成完整的URL
//        // 打开URL
//        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//        // 得到输入流,即获得了网页的内容
//        BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
//        String preLine = "";
//        String line;
//        int flag = 1;
//        // 读取输入流的数据,并显示
//        String content = "";          //翻译结果
//        while ((line = reader.readLine()) != null) {            //获取翻译结果的算法
//            if (preLine.indexOf(TransResultStartFlag) != -1 && line.indexOf(TransResultEndFlag) == -1) {
//                content += line.replaceAll(" | ", "");   //去电源代码上面的半角以及全角字符
//                break;
//            }
//            if (line.indexOf(TransResultEndFlag) != -1) {
//                flag = 1;
//            }
//            if (flag == 1) {
//                preLine = line;
//            }
//        }
//        return content;//返回翻译结果
//    }
}

 

你可能感兴趣的:(计算机)