SpringBoot+mybatis快速生成实体类,controller,service,dao,entity

此类是加上了swagger的


import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class GenEntityMysql {
    private static final GenEntityMysql INSTANCE = new GenEntityMysql();

    private String tableName;// 表名
    private String[] colNames; // 列名数组
    private String[] colTypes; // 列名类型数组
    private String[] colComment; // 列名注释
    private int[] colSizes; // 列名大小数组
    private boolean needUtil = false; // 是否需要导入包java.util.*
    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static final String SQL = "select column_name,column_type,column_comment from INFORMATION_SCHEMA.Columns where table_name = ";// 数据库操作

    // TODO 需要修改的地方
    private static final String URL = "";//数据库地址
    private static final String NAME = "";
    private static final String PASS = "";
    private static final String DRIVER = "com.mysql.jdbc.Driver";

    private String entityOutPath = "";//实体类生成所在包的路径
    private String daoOutPath = "";  // 指定dao层生成所在包的路径
    private String serviceOutPath = "";  // 指定service层生成所在包的路径
    private String controlOutPath = "";  // 指定control层生成所在包的路径

    private String resultPath = "import com.nc.result.Result;";//自行封装的结果类


    // 无需修改,自动生成
    private String daoClassName; // dao层类名
    private String serviceClassName; // service层类型
    private String controlClassName; // control层类名

    private String authorName = "tcd";// 作者名字
    private String[] generateTables = {""};//指定需要生成的表的表名

    /**
     * 类的构造方法
     */
    private GenEntityMysql() {
    }

    /**
     * @return 生成class的所有内容
     * @update 2020/05/11 17:30
     */
    private String parse() {
        StringBuffer sb = new StringBuffer();
        sb.append("package " + entityOutPath + ";\r\n");
        sb.append("\r\n");
        sb.append("import io.swagger.annotations.ApiModel;\r\n");

        sb.append("import java.util.Date;\r\n");
        sb.append("import io.swagger.annotations.ApiModelProperty;\r\n");
        sb.append("import lombok.Data;\nimport lombok.NoArgsConstructor;\nimport lombok.AllArgsConstructor;\n");
        // 判断是否导入工具包
        if (needUtil) {
            sb.append("import java.util.Date;\r\n");
        }
        // 注释部分
        sb.append("/**\r\n");
        sb.append(" *\r\n");
        sb.append(" * Created by " + authorName + " on " + SDF.format(new Date()) + "\r\n");
        sb.append(" */ \r\n");
        // 实体部分
        sb.append("@Data\n@ApiModel\n@AllArgsConstructor\n@NoArgsConstructor\n");
        sb.append("public class " + getTransStr(tableName, true) + "{\r\n\r\n");
        processAllAttrs(sb);// 属性
        sb.append("\r\n");
        //   processAllMethod(sb);// get set方法
        sb.append("}\r\n");
        return sb.toString();
    }

    /**
     * @return 生成dao的所有内容
     * @update 2020/05/11 17:30
     */
    private String daoParse() {
        StringBuffer sb = new StringBuffer();
        String transStr = getTransStr(tableName, true);
        String transStr1 = getTransStr(tableName, false);
        sb.append("package " + daoOutPath + ";\r\n");
        sb.append("\r\n");
        sb.append("import org.springframework.stereotype.Repository;\nimport org.apache.ibatis.annotations.*;\n");
        sb.append("import " + entityOutPath + "." + transStr + ";\r\n");
        sb.append("import java.util.List;\n");
        sb.append("\r\n");
        // 注释部分
        sb.append("/**\r\n");
        sb.append(" * Created by " + authorName + " on " + SDF.format(new Date()) + "\r\n");
        sb.append(" */ \r\n");

        sb.append("@Repository\n");
        sb.append("public interface " + transStr + "Dao" + "{\r\n\r\n");

        sb.append("\t//查询" + tableName + "1信息");
        sb.append("\r\n");
        sb.append("\t@Select(\"select * from " + tableName + "\")\n");   // select
        sb.append("\tList<" + transStr + "> find" + transStr + "(" + transStr + " " + transStr1 + ");\n\n");

        StringBuffer insertCol = new StringBuffer();
        StringBuffer insertCol1 = new StringBuffer();
        for (int i =  colNames.length - 1; i > 0 ; i--) {
            insertCol.append((i == colNames.length - 1 ? "" : ",") + colNames[i]);
            insertCol1.append("#{" + getTransStr(colNames[i], false) + "}" + (i == colNames.length || i == 1 ? "" : ","));
        }
        sb.append("\t//新增" + tableName + "1信息");
        sb.append("\r\n");
        sb.append("\t@Insert(\"insert into " + tableName + "(" + insertCol + ") " + "values(" + insertCol1 + ")\")\n"); // insert
        sb.append("\tvoid insert" + transStr + "(" + transStr + " " + transStr1 + ");\n\n");

        StringBuffer updateCol = new StringBuffer();
        for (int i = colNames.length - 1; i > 0 ; i--) {
            updateCol.append((i == colNames.length - 1 ? "" : ",") + colNames[i] + "=#{" + getTransStr(colNames[i], false) + "}");
        }

        sb.append("\t//修改" + tableName + "1信息");
        sb.append("\r\n");
        sb.append("\t@Update(\"update " + tableName + " set " + updateCol + " where id=#{id}\")\n");      // update
        sb.append("\t" + "void update" + transStr + "(" + transStr + " " + transStr1 + ");\n\n");

        sb.append("\t//删除" + tableName + "1信息");
        sb.append("\r\n");
        sb.append("\t@Update(\"update " + tableName + " set is_del= -1 where id=#{id}\")\n"); // delete
        sb.append("\tInteger delete" + transStr + "(@Param(\"id\")Integer id);\n\n");

        sb.append("}");
        return sb.toString();
    }

    /**
     * @return 生成service的所有内容
     * @update 2020/05/11 17:30
     */
    private String serviceParse() {
        StringBuffer sb = new StringBuffer();
        String transStr = getTransStr(tableName, true);
        String transStr1 = getTransStr(tableName, false);
        sb.append("package " + serviceOutPath + ";\r\n");
        sb.append("\r\n");
        sb.append(resultPath + "\r\n");
        sb.append("import org.springframework.stereotype.Service;\r\n");
        sb.append("import " + entityOutPath + "." + transStr + ";\r\n");
        sb.append("import " + daoOutPath + "." + transStr + "Dao;\r\n");
        sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n");
        sb.append("import javax.servlet.http.HttpServletRequest;\r\n");
        sb.append("import org.springframework.transaction.annotation.Transactional;\r\n");
        sb.append("import java.util.List;\r\n");

        sb.append("\r\n");
        // 注释部分
        sb.append("/**\r\n");
        sb.append(" * Created by " + authorName + " o n " + SDF.format(new Date()) + "\r\n");
        sb.append(" */ \r\n");

        sb.append("@Service\n");
        sb.append("public class " + transStr + "Service" + " {\r\n\r\n");

        sb.append("\t@Autowired\r\n\t");
        sb.append(transStr + "Dao ");
        sb.append(transStr1 + "Dao;\n\n");

        sb.append("\t//查询" + transStr + "1信息");
        sb.append("\r\n");
        sb.append("\tpublic Result find" + transStr + "(" + transStr + " " + transStr1 + ") { \r\n");
        sb.append("\t\t//查询" + transStr + "1集合信息\r\n");
        sb.append("\t\tList<"+transStr+"> "+transStr1+"List = "+transStr1+"Dao.find"+transStr+"("+(transStr1)+");\r\n");
        sb.append("\t\treturn Result.success("+transStr1+"List);\r\n");
        sb.append("\t}\r\n\n");

        sb.append("\t//新增" + transStr + "1信息");
        sb.append("\r\n");
        sb.append("\t@Transactional\n");
        sb.append("\tpublic Result insert"+transStr+"("+transStr+" "+transStr1+", HttpServletRequest request) {\r\n");
        sb.append("\t\tif (" + transStr1 + " == null) return Result.exception(\"参数为空,请联系管理员\");\r\n");
        sb.append("\t\t" + transStr1 + "Dao.insert" + transStr + "(" + (transStr1) + ");\r\n");
        sb.append("\t\treturn Result.success();\r\n");
        sb.append("\t}\r\n\n");

        sb.append("\t//修改" + transStr + "1信息");
        sb.append("\r\n");
        sb.append("\t@Transactional\n");
        sb.append("\tpublic Result update");
        sb.append(transStr);
        sb.append("(");
        sb.append(transStr);
        sb.append(" ");
        sb.append(transStr1);
        sb.append(", HttpServletRequest request) {\r\n\t\t");
        sb.append("if (");
        sb.append(transStr1);
        sb.append(" == null || ");
        sb.append(transStr1);
        sb.append(".getId() == null) return Result.exception(\"参数为空,请联系管理员\");\r\n");
        sb.append("\t\t");
        sb.append(transStr1);
        sb.append("Dao.update");
        sb.append(transStr);
        sb.append("(");
        sb.append(transStr1);
        sb.append(");\r\n\t\treturn Result.success();\r\n");
        sb.append("\t}\r\n\n");

        sb.append("\t//删除" + transStr + "1信息");
        sb.append("\r\n");
        sb.append("\tpublic Result delete" + transStr + "(Integer id) { \r\n");
        sb.append("\t\tif(1 == " + transStr1 + "Dao.delete" + transStr + "(id))\r\n");
        sb.append("\t\t\treturn Result.success();\r\n");
        sb.append("\t\t\treturn Result.exception(\"删除失败!\");\r\n");
        sb.append("\t}\r\n");
        sb.append("}");
        return sb.toString();
    }

    public String controllerParse() {
        StringBuffer sb = new StringBuffer();
        String transStr = getTransStr(tableName, true);
        String transStr1 = getTransStr(tableName, false);
        sb.append("package " + controlOutPath + ";\r\n");
        sb.append("\r\n");

        sb.append("import io.swagger.annotations.ApiOperation;\r\n");
        sb.append("import " + serviceOutPath + "." + transStr + "Service;\r\n");
        sb.append("import " + entityOutPath + "." + transStr + ";\r\n");
        //    sb.append(webLogPath + "\r\n");
        sb.append(resultPath + "\r\n");
        sb.append("import org.springframework.web.bind.annotation.PostMapping;\r\n");
        sb.append("import org.springframework.web.bind.annotation.RequestMapping;\r\n");
        sb.append("import org.springframework.web.bind.annotation.RestController;\r\n");
        sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n");
        sb.append("import io.swagger.annotations.Api;\r\n");
        sb.append("import io.swagger.annotations.ApiImplicitParam;\r\n");
        sb.append("import io.swagger.annotations.ApiImplicitParams;\r\n");
        sb.append("import org.springframework.web.bind.annotation.*;\r\n");
        sb.append("import javax.servlet.http.HttpServletRequest;\r\n");

        sb.append("/**\r\n");
        sb.append(" * Created by " + authorName + " on " + SDF.format(new Date()) + "\r\n");
        sb.append(" */ \r\n");

        sb.append("@Slf4j\r\n");
        sb.append("@RestController\r\n");
        sb.append("@RequestMapping(\"/" + transStr1 + "\")\r\n");
        sb.append("@Api(tags = {\"\"})\r\n");
        sb.append("public class " + transStr + "Controller {\r\n");
        sb.append("\t@Autowired\r\n");
        sb.append("\t" + transStr + "Service " + transStr1 + "Service;\r\n\r\n");

        sb.append("\t@GetMapping(\"/find" + transStr + "\")\r\n");
        sb.append("\t@ApiOperation(value = \"查询" + transStr + "1信息\")\r\n");
        sb.append("\tpublic Result<" + transStr + "> find" + transStr + "(" + transStr + " " + transStr1 + ") {\r\n\t\t");
        sb.append("return " + transStr1 + "Service.find" + transStr + "(" + transStr1 + ");\r\n");
        sb.append("\t}\r\n\r\n");

        sb.append("\t@PostMapping(\"/insert"+transStr+"\")\r\n");
        sb.append("\t@ApiOperation(value = \"新增" + transStr + "1信息\")\r\n");
//        sb.append("\t@WebLog(description = \"\")\r\n");
        sb.append("\tpublic Result<" + transStr + "> insert"+transStr+"(@RequestBody "+transStr+" "+transStr1 +", HttpServletRequest request) {\r\n\t\t");
        sb.append("return "+transStr1+"Service.insert"+transStr+"("+transStr1+",request);\r\n");
        sb.append("\t}\r\n\r\n");

        sb.append("\t@PostMapping(\"/update"+transStr+"\")\r\n");
        sb.append("\t@ApiOperation(value = \"修改" + transStr + "1\")\n");
//        sb.append("\t@WebLog(description = \"\")\r\n");
        sb.append("\tpublic Result<" + transStr + "> update"+transStr+"(@RequestBody "+transStr+" "+transStr1 +", HttpServletRequest request) {\r\n\t\t");
        sb.append("return "+transStr1+"Service.update"+transStr+"("+transStr1+",request);\r\n");
        sb.append("\t}\r\n\r\n");

        sb.append("\t@PostMapping(\"/delete"+transStr+"\")\r\n");
        sb.append("\t@ApiOperation(value = \"删除" + transStr + "1信息\")\r\n");
//        sb.append("\t@WebLog(description = \"\")\r\n");
        sb.append("\tpublic Result delete"+transStr+"(Integer id) {\r\n");
        sb.append("\t\treturn "+transStr1+"Service.delete"+transStr+"(id);\r\n");
        sb.append("\t}\r\n\r\n");

        sb.append("}");
        return sb.toString();
    }

    /**
     * @param sb
     * @description 生成所有成员变量
     * @author paul
     * @date 2017年8月18日 下午5:15:04
     * @update 2017年8月18日 下午5:15:04
     * @version V1.0
     */
    private void processAllAttrs(StringBuffer sb) {
        int j = 0;
        for (int i = colNames.length - 1; i >= 0; i--) {
            j++;
            sb.append("\t@ApiModelProperty(name = \"" + getTransStr(colNames[i], false) + "\", value = \"" + colComment[i] + "\", dataType = \"" + sqlType2JavaType(colTypes[i]) + "\", position = " + j + ")\n");
            sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + getTransStr(colNames[i], false) + ";\r\n");
        }
    }

    /**
     * @param sb
     * @description 生成所有get/set方法
     * @author paul
     * @date 2017年8月18日 下午5:14:47
     * @update 2017年8月18日 下午5:14:47
     * @version V1.0
     */
    private void processAllMethod(StringBuffer sb) {
        for (int i = 0; i < colNames.length; i++) {
            sb.append("\tpublic void set" + getTransStr(colNames[i], true) + "(" + sqlType2JavaType(colTypes[i]) + " "
                    + getTransStr(colNames[i], false) + "){\r\n");
            sb.append("\t\tthis." + getTransStr(colNames[i], false) + "=" + getTransStr(colNames[i], false) + ";\r\n");
            sb.append("\t}\r\n");
            sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + getTransStr(colNames[i], true) + "(){\r\n");
            sb.append("\t\treturn " + getTransStr(colNames[i], false) + ";\r\n");
            sb.append("\t}\r\n");
        }
    }

    /**
     * @param str 传入字符串
     * @return
     * @description 将传入字符串的首字母转成大写
     * @author paul
     * @date 2017年8月18日 下午5:12:12
     * @update 2017年8月18日 下午5:12:12
     * @version V1.0
     */
    private String initCap(String str) {
        char[] ch = str.toCharArray();
        if (ch[0] >= 'a' && ch[0] <= 'z')
            ch[0] = (char) (ch[0] - 32);
        return new String(ch);
    }

    /**
     * @return
     * @description 将mysql中表名和字段名转换成驼峰形式
     * @author paul
     * @date 2017年8月18日 下午4:55:07
     * @update 2017年8月18日 下午4:55:07
     * @version V1.0
     */
    private String getTransStr(String before, boolean firstChar2Upper) {
        //不带"_"的字符串,则直接首字母大写后返回
        if (!before.contains("_"))
            // 为false 首字母不转为大写
            return firstChar2Upper ? initCap(before) : before;
        String[] strs = before.split("_");
        StringBuffer after = null;
        if (firstChar2Upper) {
            after = new StringBuffer(initCap(strs[0]));
        } else {
            // 为false 表示首字母不转为大写
            after = new StringBuffer(strs[0]);
        }
        if (strs.length > 1) {
            for (int i = 1; i < strs.length; i++)
                after.append(initCap(strs[i]));
        }
        return after.toString();
    }

    /**
     * @return
     * @description 查找sql字段类型所对应的Java类型
     * @author paul
     * @date 2017年8月18日 下午4:55:41
     * @update 2017年8月18日 下午4:55:41
     * @version V1.0
     */
    private 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 "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")) {
            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")
                || sqlType.equalsIgnoreCase("timestamp")) {
            return "Date";
        } else if (sqlType.equalsIgnoreCase("image")) {
            return "Blod";
        }
        return null;
    }

    /**
     * 生成方法
     *
     * @throws Exception
     */
    private void create() throws Exception {
        //与数据库的连接
        Connection con;
        PreparedStatement pStemt = null;
        Class.forName(DRIVER);
        con = DriverManager.getConnection(URL, NAME, PASS);
        System.out.println("连接数据库成功");
        //获取数据库的元数据
        //    DatabaseMetaData db = con.getMetaData();
        //是否有指定生成表,有指定则直接用指定表,没有则全表生成
        List<String> tableNames = new ArrayList<>();
        if (generateTables == null) {
            //从元数据中获取到所有的表名
    /*        ResultSet rs = db.getTables(null, null, null, new String[]{"TABLE"});
            while (rs.next()) tableNames.add(rs.getString(3));*/
            throw new RuntimeException("表名不能为空");
        } else {
            for (String tableName : generateTables) tableNames.add(tableName);
        }
        //      String tableSql;
        PrintWriter pw = null;
        for (int j = 0; j < tableNames.size(); j++) {
            // 获取表名
            tableName = tableNames.get(j);
            //    tableSql = SQL + tableName;
            pStemt = con.prepareStatement("select column_name,data_type,column_comment from INFORMATION_SCHEMA.Columns where table_name=? order by ordinal_position");
            pStemt.setString(1, tableName);

            ResultSet rs = pStemt.executeQuery();
            rs.last();
            int size = rs.getRow();
            colNames = new String[size];
            colTypes = new String[size];
            colComment = new String[size];
            rs.beforeFirst();
            for (int i = size - 1; i >= 0; i--) {
                rs.next();
                colNames[i] = rs.getString("column_name");
                colTypes[i] = rs.getString("data_type");
                colComment[i] = rs.getString("column_comment");
            }

            // 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。
   /*         ResultSetMetaData rsmd = pStemt.getMetaData();
            ParameterMetaData parameterMetaData = pStemt.getParameterMetaData();
            ResultSet generatedKeys = pStemt.getGeneratedKeys();*/


            // 获取表字段数量
/*            int size = rsmd.getColumnCount();
            colNames = new String[size];
            colTypes = new String[size];
            colSizes = new int[size];
            //获取所需的信息
            for (int i = 0; i < size; i++) {
                // 获取列名称
                colNames[i] = rsmd.getColumnName(i + 1);
                // 获取列类型
                colTypes[i] = rsmd.getColumnTypeName(i + 1);

                if (colTypes[i].equalsIgnoreCase("datetime"))   // 如果为date类型 导入jar包
                    needUtil = true;
                // 获取长度
                colSizes[i] = rsmd.getColumnDisplaySize(i + 1);
            }*/
            //解析生成class的所有内容
            String content = parse();
            String dao = daoParse();
            String service = serviceParse();
            String controller = controllerParse();
            //输出生成文件
            File directory = new File("");
            //directory.getAbsolutePath() 当前项目位置
            String dirName = directory.getAbsolutePath() + "/src/main/java/";
            File dir = new File(dirName);
            // File.exists() 判断文件是否存在, 存在返回true
            // File f1 = new File("E://aaa//bbb");
            // f1.mkdirs(); 生成所有目录
            // f1.mkdir(); 必须AAA目录存在才能生成BBB目录
            if (!dir.exists() && dir.mkdirs()) System.out.println("generate dir 【" + dirName + "】");
            String javaPath = dirName + entityOutPath.replace(".", "/") + "/" + getTransStr(tableName, true) + ".java";
            String daoPath = dirName + daoOutPath.replace(".", "/") + "/" + getTransStr(tableName, true) + "Dao" + ".java";
            String servicePath = dirName + serviceOutPath.replace(".", "/") + "/" + getTransStr(tableName, true) + "Service" + ".java";
            String controllerPath = dirName + controlOutPath.replace(".", "/") + "/" + getTransStr(tableName, true) + "Controller" + ".java";
            FileWriter fw = new FileWriter(daoPath);
            pw = new PrintWriter(fw);
            pw.println(dao);
            pw.flush();
            fw = new FileWriter(servicePath);
            pw = new PrintWriter(fw);
            pw.println(service);
            pw.flush();
            fw = new FileWriter(controllerPath);
            pw = new PrintWriter(fw);
            pw.println(controller);
            pw.flush();
//            FileWriter fw = new FileWriter(javaPath);
            fw = new FileWriter(javaPath);
            pw = new PrintWriter(fw);
            pw.println(content);
            pw.flush();

            System.out.println("create class 【" + tableName + "】");
        }
        if (pw != null)
            pw.close();
    }

    /**
     * @param args
     * @description 执行方法
     * @author paul
     * @date 2017年8月18日 下午2:03:35
     * @update 2017年8月18日 下午2:03:35
     * @version V1.0
     */
    public static void main(String[] args) {
        try {
            INSTANCE.create();
            System.out.println("generate classes success!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值