簡易代碼生成器


最近寫項目,大量重復的代碼寫的想吐,於是就想構建自己的自動代碼生成器來偷點懶

參考文檔:https://blog.csdn.net/jilongliang/article/details/50196971

在上述文檔基礎上改成自己需要的代碼結構-----首先把數據庫相關的去掉,嗯,有其他生成sqlservice 數據庫

實體類的代碼,見上傳文件

結果結構展示

1  准備jar 

commons-lang3-3.8.jar

2   后台代碼的書寫

Java 文件生成的代碼工具類  FileUtils.java

package com.autojava.test;

import java.io.File;
import java.io.FileWriter;

public class FileUtils {
    /**
     * 把生成的文件都保存.
     * @param path
     * @param data
     */
    public static void save(String path, String data) {
        try {
            File file = new File(path);
            File dir = new File(path.substring(0, path.lastIndexOf("/")));
            if(!dir.exists()) {
                dir.mkdirs();
            }
            FileWriter out = new FileWriter(file);
            out.write(data);
            out.flush();
            out.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

核心類-----CodeGenerator.java

 

package com.autojava.test;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;  
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;

@SuppressWarnings("all")
public class CodeGenerator {


    /*************************變量****Begin************************************/
    private static final String myEmail="";//Email
    private static final String Version="1.0";//版本
    private static  String Description="自動代碼生成器";//描述

    public static final String ENTER = "\n";//換行
    public static final String TAB = "    ";//tab
    public static final String NAME = "NAME";
    public static final String TABLE_CAT = "TABLE_CAT";//表 catalog
    public static final String TABLE_SCHEM = "TABLE_SCHEM";//表 schema
    public static final String TABLE_NAME = "TABLE_NAME";//表名
    public static final String TABLE_TYPE = "TABLE_TYPE";//表類型
    public static final String REMARKS = "REMARKS";//表注釋
    public static final String TYPE = "TYPE";//表的類型
    public static final String SIZE = "SIZE";//大小
    public static final String CLASS = "CLASS";//類別
    

    /*************************變量****End************************************/
     //從配置獲取工程的包名路徑
    public static  String ROOT_PACKAGE = "com.prison";
    //獲取作者.
    public static final String AUTHOR = "JS";
    public static final String NOW_DATE = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
   
        /**
         *  生成封裝好模板的類文件
         * @param className
         * @throws Exception 
         */
    
        public void todo(String className,String rootpackage,String description,String mappingUrl) throws Exception {
            
              //設置參數    
              this.ROOT_PACKAGE=rootpackage;
              this.Description=description; 
             
             this.createRestControllerClass(className,mappingUrl);
             
             this.createViewControllerClass(className, mappingUrl);
             
             this.createDaoClass(className);
             
             this.createServiceClass(className);
             
             this.createServiceImplClass(className);
        }
    
    
        
        /***
         * 生成dao接口interface類的代碼
         * 
         * @throws Exception
         */
    public void createDaoClass(String className) throws Exception {
        

        String objectName = StringUtils.uncapitalize(className);

        StringBuilder sb = new StringBuilder();
        sb.append("package " + ROOT_PACKAGE + ".dao;").append(ENTER);
       //sb.append("import java.io.Serializable;").append(ENTER);
       //sb.append("import java.util.List;").append(ENTER);
        sb.append("import org.springframework.stereotype.Repository;").append(ENTER);
       //sb.append("import com.flong.commons.persistence.bean.SimplePage;").append(ENTER);
       //sb.append("import com.flong.commons.persistence.dao.EntityDao;").append(ENTER);
       //sb.append("import com.flong.modules.pojo."+className+";").append(ENTER);
        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("/**\n * @Created:" + NOW_DATE + "\n * @Author " + AUTHOR + "\n");
        sb.append(" * @Version:").append(Version).append(ENTER);
        sb.append(" * @Description:").append(Description).append(ENTER);
       // sb.append(" * @Email:").append(myEmail).append("\n*/");
        sb.append("\n*/");
        sb.append(ENTER);
        sb.append("@Repository").append(ENTER);
        
        sb.append("public interface " + className + "Dao{").append(ENTER);


       // sb.append("/**查詢*/").append(ENTER);
       // sb.append(" public List<"+className+"> list(SimplePage simplePage,"+className+" "+objectName+");").append(ENTER);

       // sb.append("/**保存數據*/").append(ENTER);
        //sb.append(" public void saveData("+className+" "+objectName+");").append(ENTER);

        //sb.append("/**更新數據*/").append(ENTER);

        //sb.append(" public void updateData("+className+" "+objectName+");").append(ENTER);

        //sb.append("/**刪除數據*/").append(ENTER);

       // sb.append(" public void deleteData(Long pk);").append(ENTER);

        
        
        sb.append(ENTER);
        sb.append(ENTER);
        
        sb.append("}");
        sb.append(ENTER);
        FileUtils.save("output-code/" + ROOT_PACKAGE.replaceAll("\\.", "/") + "/dao/" + className + "Dao.java", sb.toString());
    }

   

    /***
     * 創建Service的接口
     * createServiceClass
     * @param table
     */
    public void createServiceClass(String className) {

        String objectName = StringUtils.uncapitalize(className);

        StringBuilder sb = new StringBuilder();

        sb.append("package " + ROOT_PACKAGE + ".service;").append(ENTER);;

        // sb.append("import java.io.Serializable;").append(ENTER);
        //sb.append("import java.util.List;").append(ENTER);
        //sb.append("import com.flong.commons.persistence.bean.SimplePage;").append(ENTER);
        //sb.append("import com.flong.commons.persistence.dao.EntityDao;").append(ENTER);
        //sb.append("import com.flong.modules.pojo."+className+";").append(ENTER);


        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("/**\n * @Created:" + NOW_DATE + "\n * @Author " + AUTHOR + "\n");
        sb.append(" * @Version:").append(Version).append(ENTER);
        sb.append(" * @Description:").append(Description).append(ENTER);
        //sb.append(" * @Email:").append(myEmail).append("\n*/");
        sb.append("\n*/");
        sb.append(ENTER);
        sb.append("public interface " + className + "Service {");
        sb.append(ENTER);
        
      // sb.append("/**查詢*/").append(ENTER);
      // sb.append(" public List<"+className+"> list(SimplePage simplePage,"+className+" "+objectName+");").append(ENTER);
      //
      // sb.append("/**保存數據*/").append(ENTER);
      // sb.append(" public void saveData("+className+" "+objectName+");").append(ENTER);
      //
      // sb.append("/**更新數據*/").append(ENTER);
      //
      // sb.append(" public void updateData("+className+" "+objectName+");").append(ENTER);
      //
      // sb.append("/**刪除數據*/").append(ENTER);
      //
      // sb.append(" public void deleteData(Long pk);").append(ENTER);

        
        
        
        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("}");
        sb.append(ENTER);
        FileUtils.save("output-code/" + ROOT_PACKAGE.replaceAll("\\.", "/") + "/service/" + className + "Service.java", sb.toString());

    }

    /***
     * 創建Service層的實現類
     * createServiceImplClass
     * @param table
     */
    public void createServiceImplClass(String className) {

       
        String objectName = StringUtils.uncapitalize(className);

        StringBuilder sb = new StringBuilder();

        sb.append("package " + ROOT_PACKAGE + ".service.Impl;").append(ENTER);
       // sb.append("import java.io.Serializable;").append(ENTER);
        //sb.append("import java.util.List;").append(ENTER);
        sb.append("import org.springframework.beans.factory.annotation.Autowired;").append(ENTER);
        
        sb.append("import org.springframework.stereotype.Service;").append(ENTER);
        //sb.append("import com.flong.commons.persistence.bean.SimplePage;").append(ENTER);
        //sb.append("import com.flong.commons.persistence.dao.impl.EntityDaoSupport;").append(ENTER);
        sb.append("import  "+ROOT_PACKAGE+".dao."+className+"Dao;").append(ENTER);
        sb.append("import  "+ROOT_PACKAGE+".servicer."+className+"Service;").append(ENTER);

        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("/**\n * @Created:" + NOW_DATE + "\n * @Author " + AUTHOR + "\n");
        sb.append(" * @Version:").append(Version).append(ENTER);
        sb.append(" * @Description:").append(Description).append(ENTER);
        //sb.append(" * @Email:").append(myEmail).append("\n*/");
        sb.append("\n*/");
        sb.append(ENTER);
        sb.append("@Service");
        sb.append(ENTER);
        sb.append("public class " + className + "ServiceImpl extends EntityDaoSupport  implements " + className + "Service {").append(ENTER);
        sb.append(" @Autowired ").append(ENTER);//注入Dao層的接口Name
        sb.append(className+"Dao "+objectName+"Dao;");
        sb.append(ENTER);
        
        
      // sb.append("/**查詢*/").append(ENTER);
      // sb.append(" public List<"+className+"> list(SimplePage simplePage,"+className+" "+objectName+"){").append(ENTER);
      // sb.append("     return "+objectName+"Dao.list(simplePage,"+objectName+");").append(ENTER);
      // sb.append("}").append(ENTER);//查詢的結束{
      //
      //
      //
      // sb.append("/**保存數據*/").append(ENTER);
      // sb.append(" public void saveData("+className+" "+objectName+"){").append(ENTER);
      //
      // sb.append(    objectName+"Dao.saveData("+objectName+");").append(ENTER);
      // sb.append("}");
      //
      // sb.append("/**更新數據*/").append(ENTER);
      //
      // sb.append(" public void updateData("+className+" "+objectName+"){").append(ENTER);
      // sb.append(    objectName+"Dao.updateData("+objectName+");").append(ENTER);
      //
      // sb.append("}");
      // sb.append("/**刪除數據*/").append(ENTER);
      //
      // sb.append(" public void deleteData(Long pk){").append(ENTER);
      // sb.append(    objectName+"Dao.deleteData(pk);").append(ENTER);
      // sb.append("}");


        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("}");
        sb.append(ENTER);
        FileUtils.save("output-code/" + ROOT_PACKAGE.replaceAll("\\.", "/") + "/service/Impl/" + className + "ServiceImpl.java", sb.toString());

    }


    /***
     * 創建控制層類Controller  View
     * @param table
     */
    public void createViewControllerClass(String className,String mappingUrl){
       
        //通過 org.apache.commons.lang3.StringUtils的uncapitalize方法把類名第一個字母轉換成小寫
        String objectName = StringUtils.uncapitalize(className);

        //通過 org.apache.commons.lang3.StringUtils的lowerCase方法把類名整個單詞轉化成小寫然后為springmvc的路徑返回jsp請求.
        String BASE_PATH="modules/"+StringUtils.lowerCase(className)+"/";//modules+模塊名

        StringBuilder sb = new StringBuilder();
        sb.append("package " + ROOT_PACKAGE + ".controller;").append(ENTER);;
        /*******處理這個導入需要的類*********/
        //sb.append("import java.util.List;").append(ENTER);
        //sb.append("import javax.servlet.http.HttpServletRequest;").append(ENTER);
        //sb.append("import javax.servlet.http.HttpServletResponse;").append(ENTER);
         sb.append("import org.springframework.beans.factory.annotation.Autowired;").append(ENTER);
         sb.append("import org.springframework.stereotype.Controller;").append(ENTER);
         sb.append("import org.springframework.web.bind.annotation.RequestMapping;").append(ENTER);
        // sb.append("import com.flong.commons.persistence.bean.SimplePage;").append(ENTER);
         //sb.append("import com.flong.commons.web.BaseController;").append(ENTER);
         //sb.append("import com.flong.modules.pojo."+className+";").append(ENTER);
         sb.append("import  "+ROOT_PACKAGE+".servicer."+className+"Service;").append(ENTER);

        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("/**\n * @Created:" + NOW_DATE + "\n * @Author " + AUTHOR + "\n");
        sb.append(" * @Version:").append(Version).append(ENTER);
        sb.append(" * @Description:").append(Description).append(ENTER);
        //sb.append(" * @Email:").append(myEmail).append("\n*/");
        sb.append("\n*/");
        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("@Controller").append(ENTER);
        sb.append("@RequestMapping(\""+mappingUrl+"view"+"\")");
        sb.append(ENTER);
        sb.append("public class " + className + "Controller extends BaseController {");
        sb.append(ENTER);
        sb.append(ENTER);
        sb.append(" @Autowired ").append(ENTER);//注入Service層的接口Name
        sb.append(className+"Service " +className+"Service");
        
        sb.append(ENTER);

       ////創建一個默認的查詢..
       //sb.append(ENTER);
       //sb.append("   @RequestMapping(value=\"list\")").append(ENTER);
       //sb.append("   public String list("+className+" "+objectName+",SimplePage simplePage ,HttpServletRequest request ,HttpServletResponse response){");
       //sb.append(ENTER);
       //sb.append("         List<"+className+"> list = "+className+"Service.list(simplePage, "+objectName+");");
       //sb.append(ENTER);
       //sb.append("         request.setAttribute(\""+objectName+"\", object);");
       //sb.append(ENTER);
       //sb.append("         request.setAttribute(\"page\", simplePage);");
       //sb.append(ENTER);
       //sb.append("         request.setAttribute(\"list\", list);");
       //sb.append(ENTER);
       //sb.append("         return \""+BASE_PATH+"list\";");
       //sb.append(ENTER);
       //sb.append("   }");

        sb.append(ENTER);
        sb.append("}");
        sb.append(ENTER);
        FileUtils.save("output-code/" + ROOT_PACKAGE.replaceAll("\\.", "/") + "/controller/view/" + className + "ViewController.java", sb.toString());


    }


    /***
     * 創建控制層類Controller  Rest
     * @param table
     */
    public void createRestControllerClass(String className,String mappingUrl){
       
        //通過 org.apache.commons.lang3.StringUtils的uncapitalize方法把類名第一個字母轉換成小寫
        String objectName = StringUtils.uncapitalize(className);

        //通過 org.apache.commons.lang3.StringUtils的lowerCase方法把類名整個單詞轉化成小寫然后為springmvc的路徑返回jsp請求.
        String BASE_PATH="modules/"+StringUtils.lowerCase(className)+"/";//modules+模塊名

        StringBuilder sb = new StringBuilder();
        sb.append("package " + ROOT_PACKAGE + ".controller;").append(ENTER);;
        /*******處理這個導入需要的類*********/
       //sb.append("import java.util.List;").append(ENTER);
       //sb.append("import javax.servlet.http.HttpServletRequest;").append(ENTER);
       //sb.append("import javax.servlet.http.HttpServletResponse;").append(ENTER);
        sb.append("import org.springframework.beans.factory.annotation.Autowired;").append(ENTER);
        sb.append("import org.springframework.stereotype.Controller;").append(ENTER);
        sb.append("import org.springframework.web.bind.annotation.RequestMapping;").append(ENTER);
       // sb.append("import com.flong.commons.persistence.bean.SimplePage;").append(ENTER);
        //sb.append("import com.flong.commons.web.BaseController;").append(ENTER);
        //sb.append("import com.flong.modules.pojo."+className+";").append(ENTER);
        sb.append("import  "+ROOT_PACKAGE+".servicer."+className+"Service;").append(ENTER);

        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("/**\n * @Created:" + NOW_DATE + "\n * @Author " + AUTHOR + "\n");
        sb.append(" * @Version:").append(Version).append(ENTER);
        sb.append(" * @Description:").append(Description).append(ENTER);
        //sb.append(" * @Email:").append(myEmail).append("\n*/");
        sb.append("\n*/");
        sb.append(ENTER);
        sb.append(ENTER);
        sb.append("@Controller").append(ENTER);
        sb.append("@RequestMapping(\""+mappingUrl+"rest"+"\")");
        sb.append(ENTER);
        sb.append("public class " + className + "Controller extends BaseController {");
        sb.append(ENTER);
        sb.append(ENTER);
        sb.append(" @Autowired ").append(ENTER);//注入Service層的接口Name
        sb.append(className+"Service " +className+"Service");
        sb.append(ENTER);

       // //創建一個默認的查詢..
       // sb.append(ENTER);
       // sb.append("   @RequestMapping(value=\"list\")").append(ENTER);
       // sb.append("   public String list("+className+" "+objectName+",SimplePage simplePage ,HttpServletRequest request ,HttpServletResponse response){");
       // sb.append(ENTER);
       // sb.append("         List<"+className+"> list = "+className+"Service.list(simplePage, "+objectName+");");
       // sb.append(ENTER);
       // sb.append("         request.setAttribute(\""+objectName+"\", object);");
       // sb.append(ENTER);
       // sb.append("         request.setAttribute(\"page\", simplePage);");
       // sb.append(ENTER);
       // sb.append("         request.setAttribute(\"list\", list);");
       // sb.append(ENTER);
       // sb.append("         return \""+BASE_PATH+"list\";");
       // sb.append(ENTER);
       // sb.append("   }");

        sb.append(ENTER);
        sb.append("}");
        sb.append(ENTER);
        FileUtils.save("output-code/" + ROOT_PACKAGE.replaceAll("\\.", "/") + "/controller/rest/" + className + "RestController.java", sb.toString());


    }

  
}

 

3   生成類---最后文件生成

package com.autojava.test;

import java.util.ArrayList;
import java.util.List;

/**
 * 運行生成的main
 * @author liangjilong
 *
 */
public class DoMain {

    public static void main(String[] args) {
        try {
            CodeGenerator  codeGenerator= new CodeGenerator();
            //類名  根包名  描述  訪問總路徑
            codeGenerator.todo("Dag","com.prison.auto","狗類","/auto/dag");
            
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

 

4  運行 刷新---就得到你想要的代碼了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM