自己手写一个代码生成器(java)

新建一个maven项目,pom文件引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
    <artifactId>daimashengcheng</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.0.3</version>
        </dependency>
        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.github.miemiedev</groupId>
            <artifactId>mybatis-paginator</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- MySql -->
<!--        <dependency>-->
<!--            <groupId>mysql</groupId>-->
<!--            <artifactId>mysql-connector-java</artifactId>-->
<!--            <version>5.1.30</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>6.2.2.jre8</version>
        </dependency>

        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>1.5.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.0.RELEASE</version>
        </dependency>


    </dependencies>



    <build>
        <plugins>
            <!--mybatis代码自动生成插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <!--配置文件的位置-->
                    <configurationFile>GeneratorMapper.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

1.创建代码自动生成配置类(ConfigCode)

package util;

import java.util.List;
import java.util.Map;

public class ConfigCode {
    //数据库连接
    public static String driver = "com.mysql.jdbc.Driver";
    public static String mysqlUrl = "jdbc:mysql://localhost:3306/bi?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
    public static String userName = "root";
    public static String passWord = "root";

    //实体类生成位置
    public static String entityPackName = "com.test.entity";
    //XML生成位置
    public static String mapperPackName = "mapper.basic";
    //dao生成位置
    public static String daoPackName = "com.test.mapper.basic";
    //service生成位置
    public static String servicePackName = "com.test.service.basic";
    //serviceImpl生成位置
    public static String serviceImplPackName = "com.test.service.basic.impl";
    //controlelr生成位置
    public static String controlelrPackName = "com.test.controller.basic";

    //生成文件的编码
    public static String BaseCode = "UTF-8";

    //作者
    public static String author = "zwb";
    //数据库表-实体类名称
    public static String[] data = {"user,UserPo","role,RolePo"};



}

2.创建代码自动生成模板类(CodeTemplate)

package util;

public class CodeTemplate {
    public static String entityTemplate = "package ${[packageName]};\n" +
            "\n" +
            "import lombok.Data;\n" +
            "\n" +
            "import java.io.Serializable;\n"+
            "import java.util.Date;\n"+
            "import java.math.BigDecimal;\n" +
            "\n" +
            "/**\n" +
            " * @author ${[author]}\n" +
            " * 实体类 \n" +
            " */ \n"+
            "@Data\n"+
            "public class ${[entityName]} implements Serializable {\n" +
            "    ${[body]}\n" +
            "}\n";

    public static String daoTemplate = "package ${[packageName]};\n" +
            "\n" +
            "import ${[entityPackName]}\n" +
            "import org.apache.ibatis.annotations.Mapper;\n" +
            "import java.util.List;\n" +
            "import org.apache.ibatis.annotations.Param;;\n" +
            "\n" +
            "/**\n" +
            " * @author ${[author]}\n" +
            " * dao层 \n" +
            " */ \n"+
            "@Mapper\n" +
            "public interface ${[daoName]} {\n" +
            "\n" +
            "    List<${[tableName]}> findList();\n" +
            "\n" +
            "    Integer findCount();\n" +
            "\n" +
            "    int deleteByPrimaryKey(${[keyType]} ${[keyValue]});\n" +
            "\n" +
            "    int insert(${[tableName]} ${[tableVal]});\n" +
            "\n" +
            "    int insertSelective(${[tableName]} ${[tableVal]});\n" +
            "\n" +
            "    int createAll(@Param(\"list\") List<${[tableName]}> list);\n" +
            "\n" +
            "    ${[tableName]} selectByPrimaryKey(${[keyType]} ${[keyValue]});\n" +
            "\n" +
            "    int updateByPrimaryKeySelective(${[tableName]} ${[tableVal]});\n" +
            "\n" +
            "    int updateByPrimaryKey(${[tableName]} ${[tableVal]});\n"+
            "}";

    public static String mapperTemplate ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n" +
            "<mapper namespace=\"${[daoPackName]}\">\n" +
            "\n" +
            "    <sql id=\"Base_Column_List\">\n" +
            "        ${[cloums]}\n" +
            "    </sql>\n"+
            "\n"+
            "    <select id=\"findList\" resultType=\"${[entityPackName]}\">\n" +
            "        select\n" +
            "        <include refid=\"Base_Column_List\" />\n" +
            "        from ${[entityName]}\n" +
            "        <where>\n" +
            "            <include refid=\"sqlBlack\"></include>\n" +
            "        </where>\n" +
            "    </select>\n"+
            "\n"+
            "    <select id=\"findCount\" resultType=\"java.lang.Integer\">\n" +
            "        select\n" +
            "        count(*)\n" +
            "        from ${[entityName]}\n" +
            "        <where>\n" +
            "            <include refid=\"sqlBlack\"></include>\n" +
            "        </where>\n" +
            "    </select>\n"+
            "\n" +
            "    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.${[type]}\" resultType=\"${[entityPackName]}\">\n" +
            "        select\n" +
            "        <include refid=\"Base_Column_List\" />\n" +
            "        from ${[entityName]}\n" +
            "        where ${[tOne]} = #{${[one]}}\n" +
            "    </select>\n"+
            "\n"+
            "    <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.${[type]}\">\n" +
            "        delete from ${[entityName]}\n" +
            "        where ${[tOne]} = #{${[one]}}\n" +
            "    </delete>\n"+
            "\n"+
            "    <insert id=\"insert\" parameterType=\"${[entityPackName]}\">\n" +
            "        insert into ${[entityName]} \n" +
            "        (${[cloums]})\n" +
            "        values \n" +
            "        (${[tCloums]})\n" +
            "    </insert>\n"+
            "\n"+
            "    <insert id=\"createAll\"   parameterType=\"java.util.List\">\n" +
            "        insert into ${[entityName]} \n" +
            "        (${[cloums]})\n" +
            "        values \n" +
            "        <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n"+
            "           (${[itemTCloums]})\n" +
            "        </foreach>\n"+
            "    </insert>\n"+
            "\n"+
            "    <insert id=\"insertSelective\" parameterType=\"${[entityPackName]}\">\n" +
            "        insert into ${[entityName]}\n" +
            "        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n" +
            "${[addUp]}"+
            "        </trim>\n" +
            "        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n" +
            "${[addBlw]}"+
            "        </trim>\n" +
            "    </insert>\n"+
            "\n"+
            "    <update id=\"updateByPrimaryKeySelective\" parameterType=\"${[entityPackName]}\">\n" +
            "        update ${[entityName]}\n" +
            "        <set>\n" +
            "${[updData]}"+
            "        </set>\n" +
            "        where ${[tOne]} = #{${[one]}}\n" +
            "    </update>\n"+
            "\n"+
            "    <update id=\"updateByPrimaryKey\" parameterType=\"${[entityPackName]}\">\n" +
            "        update ${[entityName]}\n" +
            "        set ${[updData2]}\n"+
            "        where ${[tOne]} = #{${[one]}}\n" +
            "    </update>\n"+
            "\n"+
            "    <!--sql块 主要用于查询条件的判断和添加条件-->\n" +
            "    <sql id=\"sqlBlack\">\n" +
            "    \n" +
            "    </sql>\n" +
            "</mapper>";

    public static String serviceTemplate ="package ${[packageName]};\n" +
            "\n" +
            "import ${[entityPackName]};\n" +
            "\n" +
            "import java.util.*;\n" +
            "\n" +
            "\n" +
            "/**\n" +
            " * @author ${[author]}\n" +
            " * service层 \n" +
            " */ \n"+
            "public interface ${[entityService]} {\n" +
            "\n" +
            "    Map<String,Object> findAll();\n" +
            "\n" +
            "    ${[tableName]} findById(${[type]} ${[cloum]});\n" +
            "\n" +
            "    int add(${[tableName]} ${[tableVal]});\n" +
            "\n" +
            "    int upd(${[tableName]} ${[tableVal]});\n" +
            "\n" +
            "    int del(${[type]} ${[cloum]});\n" +
            "}\n";

    public static String serviceImplTemplate = "package ${[packageName]};\n" +
            "\n" +
            "import ${[entityPackName]};\n" +
            "import ${[daoPackName]};\n" +
            "import ${[servicePackName]};\n" +
            "import org.springframework.beans.factory.annotation.Autowired;\n" +
            "import org.springframework.stereotype.Service;\n" +
            "\n" +
            "import java.util.*;\n" +
            "/**\n" +
            " * @author ${[author]}\n" +
            " * serviceImpl层 \n" +
            " */\n" +
            "@Service\n" +
            "public class ${[serviceImplName]} implements ${[serviceName]}{\n" +
            "\n" +
            "    @Autowired\n" +
            "    private ${[daoName]} ${[daoVal]};\n" +
            "\n" +
            "    public Map<String,Object> findAll() {\n" +
            "        Map<String,Object> map = new HashMap();\n" +
            "        int count = ${[daoVal]}.findCount();\n" +
            "        List<${[tableName]}> list = ${[daoVal]}.findList();\n" +
            "        map.put(\"count\",count);\n" +
            "        map.put(\"list\",list);\n" +
            "        return map;\n" +
            "    }\n" +
            "\n" +
            "    public ${[tableName]} findById(${[type]} ${[cloum]}) {\n" +
            "        return ${[daoVal]}.selectByPrimaryKey(${[cloum]});\n" +
            "    }\n" +
            "\n" +
            "    public int add(${[tableName]} ${[tableVal]}) {\n" +
            "        return ${[daoVal]}.insertSelective(${[tableVal]});\n" +
            "    }\n" +
            "\n" +
            "    public int upd(${[tableName]} ${[tableVal]}) {\n" +
            "        return ${[daoVal]}.updateByPrimaryKeySelective(${[tableVal]});\n" +
            "    }\n" +
            "\n" +
            "    public int del(${[type]} ${[cloum]}) {\n" +
            "        return ${[daoVal]}.deleteByPrimaryKey(${[cloum]});\n" +
            "    }\n" +
            "}\n";

    public static String controllerTemplate = "package ${[packageName]};\n" +
            "\n" +
            "import ${[entityPackName]};\n" +
            "import ${[servicePackName]};\n" +
            "import org.springframework.beans.factory.annotation.Autowired;\n" +
            "import org.springframework.web.bind.annotation.*;\n" +
            "\n" +
            "import java.util.*;\n" +
            "\n" +
            "/**\n" +
            " * @author ${[author]}\n" +
            " * controller层 \n" +
            " */ \n"+
            "@RequestMapping(\"/${[controllerVal]}\")\n" +
            "@RestController\n" +
            "public class ${[controllerName]} {\n" +
            "    @Autowired\n" +
            "    private ${[serviceName]} ${[serviceVal]};\n" +
            "\n" +
            "    @GetMapping(\"/findAll\")\n" +
            "    public Map<String,Object> findAll(){\n" +
            "        return ${[serviceVal]}.findAll();\n" +
            "    }\n" +
            "\n" +
            "    @GetMapping(\"/findById/{${[cloum]}}\")\n" +
            "    public ${[entityName]} findById(@PathVariable(\"${[cloum]}\") ${[type]} ${[cloum]}){\n" +
            "        return ${[serviceVal]}.findById(${[cloum]});\n" +
            "    }\n" +
            "\n" +
            "    @PostMapping(\"/add\")\n" +
            "    public void add(@RequestBody ${[entityName]} ${[tableVal]}){\n" +
            "        ${[serviceVal]}.add(${[tableVal]});\n" +
            "    }\n" +
            "\n" +
            "    @PostMapping(\"/upd\")\n" +
            "    public void upd(@RequestBody ${[entityName]} ${[tableVal]}){\n" +
            "        ${[serviceVal]}.upd(${[tableVal]});\n" +
            "    }\n" +
            "\n" +
            "    @GetMapping(\"/del/{${[cloum]}}\")\n" +
            "    public void del(@PathVariable(\"${[cloum]}\") ${[type]} ${[cloum]}){\n" +
            "        ${[serviceVal]}.del(${[cloum]});\n" +
            "    }\n" +
            "}\n";

}

3.创建代码自动生成主类(CreateCode)

package util;

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.common.TemplateParserContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import sun.security.krb5.Config;

import java.io.*;
import java.net.PortUnreachableException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;

public class CreateCode {
    public static String packName="src/main/java/";
    public static String packNames="src/main/resources/";
    //内容替换
    static ExpressionParser parser = new SpelExpressionParser();
    static TemplateParserContext parserContext = new TemplateParserContext("${","}");


    //根据路径内容生成文件
    public static void createFile(String url,String body){
        FileWriter fw = null;
        try{
            File file = new File(url);
            if (!file.exists()){
                file.createNewFile();
            }
            fw = new FileWriter(url);
//            BufferedWriter bw=new BufferedWriter(fw);

            OutputStreamWriter bw = new OutputStreamWriter(
                    new FileOutputStream(file), ConfigCode.BaseCode);


            bw.write(body);
            bw.close();
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            try{
                fw.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }


    //生成实体类
    public static void  initEntity(String packName,String entityPackName,Map<String,List<Map>> listLinkedHashMap){
        File file = new File( packName+entityPackName.replaceAll("\\.","/"));
        if (!file .exists() && !file .isDirectory()) {
            file .mkdirs();
        }

        for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
            String tableName = entry.getKey();
            //生成路径
            String url = packName+entityPackName.replaceAll("\\.","/")+"/"+tableName+".java";
            Map map = new HashMap();
            map.put("author",ConfigCode.author);
            map.put("packageName",entityPackName);
            map.put("entityName",tableName);
            String body = "\n";
            List<Map> list = entry.getValue();
            if (list!=null&&list.size()>0){
                for (Map maps : list) {
                   body+=  "    /**\n" +
                           "     *"+maps.get("annotation")+"\n" +
                           "     */\n" +
                           "    private "+maps.get("type")+" "+maps.get("cloum")+";\n\n";
                }
            }
            map.put("body",body);
            String entity = CodeTemplate.entityTemplate;
            String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
            createFile(url,content);
        }

    }

    //生成dao
    public static void initDao(String packName,String daoPackName,Map<String,List<Map>> listLinkedHashMap){
        File file = new File( packName+daoPackName.replaceAll("\\.","/"));
        if (!file .exists() && !file .isDirectory()) {
            file .mkdirs();
        }
        for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
            String tableName = entry.getKey();
            //生成路径
            String url = packName+daoPackName.replaceAll("\\.","/")+"/"+tableName+"Mapper.java";

            Map map = new HashMap();
            map.put("author",ConfigCode.author);
            map.put("packageName",daoPackName);
            map.put("entityPackName",ConfigCode.entityPackName+"."+tableName+";");
            map.put("daoName",tableName+"Mapper");
            map.put("keyType",entry.getValue().get(0).get("type"));
            map.put("keyValue",entry.getValue().get(0).get("cloum"));
            map.put("tableName",tableName);
            map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
            String entity = CodeTemplate.daoTemplate;
            String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
            createFile(url,content);
        }
    }

    //生成mapper
    public static void initMapper(String packNames,String mapperPackName,Map<String,List<Map>> listLinkedHashMap){
        File file = new File( packNames+mapperPackName.replaceAll("\\.","/"));
        if (!file .exists() && !file .isDirectory()) {
            file .mkdirs();
        }
        for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
            String tableName = entry.getKey();
            //生成路径
            String url = packNames+mapperPackName.replaceAll("\\.","/")+"/"+tableName+"Mapper.xml";
            List<Map> list = entry.getValue();
            String cloums = "";
            String tCloums = "";
            String itemTCloums = "";
            String addUp = "";
            String addBlw = "";
            String updData = "";
            String updData2 = "";
            if (list!=null&&list.size()>0){
                int i=0;
                for (Map maps : list) {
                    cloums+=","+maps.get("orailCloum");
                    tCloums+=",#{"+maps.get("cloum")+"}";
                    itemTCloums+=",#{item."+maps.get("cloum")+"}";
                    addUp+= "         <if test=\""+maps.get("cloum")+" != null\">\n" +
                            "           "+maps.get("orailCloum")+",\n" +
                            "         </if>\n";
                    addBlw+="         <if test=\""+maps.get("cloum")+" != null\">\n" +
                            "           #{"+maps.get("cloum")+"},\n" +
                            "         </if>\n";
                    if (i!=0){
                        updData+="         <if test=\""+maps.get("cloum")+" != null\">\n" +
                                "           "+maps.get("orailCloum")+" = #{"+maps.get("cloum")+"},\n" +
                                "         </if>\n";
                        updData2+=","+maps.get("orailCloum")+" = #{"+maps.get("cloum")+"}";
                    }
                    i++;
                }
            }

            Map map = new HashMap();
            map.put("cloums",cloums.substring(1));
            map.put("tCloums",tCloums.substring(1));
            map.put("itemTCloums",itemTCloums.substring(1));
            map.put("addUp",addUp);
            map.put("addBlw",addBlw);
            map.put("updData",updData);
            map.put("updData2",updData2.substring(1));
            map.put("daoPackName",ConfigCode.daoPackName+"."+tableName+"Mapper");
            map.put("type",list.get(0).get("type"));
            map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
            map.put("entityName",list.get(0).get("tableName"));
            map.put("tOne",list.get(0).get("orailCloum"));
            map.put("one",list.get(0).get("cloum"));
            String entity = CodeTemplate.mapperTemplate;
            String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
            createFile(url,content);
        }
    }

    //生成service
    public static void initService(String packName,String servicePackName,Map<String,List<Map>> listLinkedHashMap){
        File file = new File( packName+servicePackName.replaceAll("\\.","/"));
        if (!file .exists() && !file .isDirectory()) {
            file .mkdirs();
        }
        for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
            String tableName = entry.getKey();
            //生成路径
            String url = packName+servicePackName.replaceAll("\\.","/")+"/"+tableName+"Service.java";

            Map map = new HashMap();
            map.put("author",ConfigCode.author);
            map.put("packageName",servicePackName);
            map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
            map.put("entityService",tableName+"Service");
            map.put("tableName",tableName);
            map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
            map.put("type",entry.getValue().get(0).get("type"));
            map.put("cloum",entry.getValue().get(0).get("cloum"));
            String entity = CodeTemplate.serviceTemplate;
            String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
            createFile(url,content);
        }
    }


    //生成serviceimpl
    public static void initServiceImpl(String packName,String serviceImplPackName,Map<String,List<Map>> listLinkedHashMap){
        File file = new File( packName+serviceImplPackName.replaceAll("\\.","/"));
        if (!file .exists() && !file .isDirectory()) {
            file .mkdirs();
        }
        for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
            String tableName = entry.getKey();
            //生成路径
            String url = packName+serviceImplPackName.replaceAll("\\.","/")+"/"+tableName+"ServiceImpl.java";

            Map map = new HashMap();
            map.put("author",ConfigCode.author);
            map.put("packageName",serviceImplPackName);
            map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
            map.put("servicePackName",ConfigCode.servicePackName+"."+tableName+"Service");
            map.put("daoPackName",ConfigCode.daoPackName+"."+tableName+"Mapper");
            map.put("serviceImplName",tableName+"ServiceImpl");
            map.put("serviceName",tableName+"Service");
            map.put("daoName",tableName+"Mapper");
            map.put("daoVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1)+"Mapper");
            map.put("tableName",tableName);
            map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
            map.put("type",entry.getValue().get(0).get("type"));
            map.put("cloum",entry.getValue().get(0).get("cloum"));

            String entity = CodeTemplate.serviceImplTemplate;
            String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
            createFile(url,content);
        }
    }


    //生成controller
    public static void initController(String packName,String controllerPackName,Map<String,List<Map>> listLinkedHashMap){
        File file = new File( packName+controllerPackName.replaceAll("\\.","/"));
        if (!file .exists() && !file .isDirectory()) {
            file .mkdirs();
        }
        for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
            String tableName = entry.getKey();
            //生成路径
            String url = packName+controllerPackName.replaceAll("\\.","/")+"/"+tableName+"Controller.java";

            Map map = new HashMap();
            map.put("author",ConfigCode.author);
            map.put("packageName",controllerPackName);
            map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
            map.put("servicePackName",ConfigCode.servicePackName+"."+tableName+"Service");
            map.put("controllerVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
            map.put("controllerName",tableName+"Controller");
            map.put("serviceName",tableName+"Service");
            map.put("serviceVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1)+"Service");
            map.put("entityName",tableName);
            map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
            map.put("type",entry.getValue().get(0).get("type"));
            map.put("cloum",entry.getValue().get(0).get("cloum"));

            String entity = CodeTemplate.controllerTemplate;
            String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
            createFile(url,content);
        }
    }


        public static void exectSql(){
        String[] data = ConfigCode.data;
        Map<String,List<Map>> listLinkedHashMap = new LinkedHashMap<String, List<Map>>();
        if (data!=null&&data.length>0){
            for (int i = 0; i < data.length; i++) {
                String[] split = data[i].split(",");
                try {
                    Class.forName(ConfigCode.driver);
                    String url = ConfigCode.mysqlUrl;
                    String username = ConfigCode.userName;
                    String password = ConfigCode.passWord;
                    String databases = url.replaceAll("//","").substring(url.replaceAll("//","").indexOf("/")+1,url.replaceAll("//","").indexOf("?"));
                    Connection con = DriverManager.getConnection(url, username, password);
                    Statement stat = con.createStatement();
                    String sql = "SELECT\n" +
                            "distinct \n"+
                            "COLUMN_NAME 字段名称,\n" +
                            "COLUMN_COMMENT 字段注释,\n" +
                            "COLUMN_TYPE 字段类型,\n" +
                            "IF\n" +
                            "( column_key = 'PRI', '是', '否' )  主键,\n" +
                            "IF\n" +
                            "( IS_NULLABLE = 'YES', '是', '否' ) 允许为空,\n" +
                            "ordinal_position\n"+
                            "FROM\n" +
                            "INFORMATION_SCHEMA.COLUMNS \n" +
                            "WHERE\n" +
                            "table_name = '"+split[0]+"'\n"+
                            "and TABLE_SCHEMA = '"+databases+"'\n"+
                            "order by ordinal_position";
                    System.out.println(sql);
                    ResultSet rs = stat.executeQuery(sql);
                    List<Map> list = new ArrayList<Map>();
                    while(rs.next()) {
                        Map map = new HashMap();
                        String cloum = replaceUnderlineAndFirstToUpper(rs.getString("字段名称"),"_","");
                        String annotation = rs.getString("字段注释");
                        String type = rs.getString("字段类型");
                        map.put("tableName",split[0]);
                        map.put("orailCloum",rs.getString("字段名称"));
                        map.put("cloum",cloum);
                        map.put("annotation",annotation);
                        map.put("type",type.indexOf("varchar")!=-1?"String":(type.indexOf("bigint")!=-1?"Long":(type.indexOf("int")!=-1?"Integer":(type.indexOf("date")!=-1?"Date":(type.indexOf("datetime")!=-1?"Date":(type.indexOf("double")!=-1?"Double":(type.indexOf("timestamp")!=-1?"Date":(type.indexOf("decimal")!=-1?"BigDecimal":"String"))))))));
                        list.add(map);
                    }
                    listLinkedHashMap.put(split[1],list);
                    rs.close();
                    stat.close();
                    con.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        initEntity(packName, ConfigCode.entityPackName,listLinkedHashMap);
        initDao(packName, ConfigCode.daoPackName,listLinkedHashMap);
        initMapper(packNames,ConfigCode.mapperPackName,listLinkedHashMap);
        initService(packName,ConfigCode.servicePackName,listLinkedHashMap);
        initServiceImpl(packName,ConfigCode.serviceImplPackName,listLinkedHashMap);
        initController(packName,ConfigCode.controlelrPackName,listLinkedHashMap);

    }

    /**
     * 替换字符串并让它的下一个字母为大写
     *
     * @param filed   对应字符串
     * @param split   分隔符
     * @param replace 替换字符
     */
    public static String replaceUnderlineAndFirstToUpper(String filed, String split, String replace) {
        StringBuilder newString = new StringBuilder();
        int first;
        while (filed.contains(split)) {
            first = filed.indexOf(split);
            if (first != filed.length()) {
                newString.append(filed, 0, first).append(replace);
                filed = filed.substring(first + split.length());
                filed = firstCharacterToUpper(filed);
            }
        }
        newString.append(filed);
        return newString.toString();
    }

    /**
     * 首字母大写
     *
     * @param filed 对应字符串
     */
    public static String firstCharacterToUpper(String filed) {
        return filed.substring(0, 1).toUpperCase() + filed.substring(1);
    }



    public static void main(String[] args) {
        exectSql();
//        initEntity(packName, ConfigCode.entityPackName,"user");
    }


}

4.执行CreateCode中的main方法生成代码

查看生成的目录结构和代码

生成后的目录
在这里插入图片描述

查看生成后的代码,这里只展示controller层和dao层
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值