1. 程式人生 > >java簡易程式碼生成器V1版本

java簡易程式碼生成器V1版本

不知道大家有沒有同感,日常工作中,有好多重複的工作,大多數都是在複製貼上,只是操作的物件實體不同,每個模組最後變成了只是修改一下其中的屬性,剩下的增刪改查完全都是一樣的,但就是修改這些屬性簡直是煩的要死,一個類裡面要是有20個屬性那簡直要瘋了。所以本人想到一個投機取巧的辦法,想用程式碼去生成程式碼,目前處於初級階段,希望以後各路大神一起研究,完善出一款開源的程式碼生成器。

以spring+springMVC+mybatis的專案為例子。

使用方法:把要操作的實體類屬性部分,複製到一個txt檔案中,如下我放在桌面的read.txt中

/**

*/
private static final long serialVersionUID = 1L;
//主鍵ID
    private Integer discountRuleID;
    //金額範圍最小值
    private BigDecimal minMoney;
    //金額範圍最大值
    private BigDecimal maxMoney;
    //折扣
    private Float discount;
    //建立人
    private Integer creator;
    //建立時間
    private Date createTime;
    //修改人
    private Integer modifier;
    //修改時間
    private Date modifyTime;
    //狀態(0 無效 1有效)
    private Short status;
    //描述
    private String remark;

程式碼生成器類:

package com.test.生成程式碼;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;




/** 
 * @Description:
 * @author 周振偉 
 * @mail 
 * @version 1.0  
 * @copyright 
 * @date 2016-8-26 下午03:24:46 
 */
public class CodeMachine {
public static void main(String[] args) {
String filePath ="C:\\Users\\dell\\Desktop\\read.txt";
String res =getColumnstr(filePath);  //獲取屬性名稱以逗號隔開的字串
System.out.println(sqlStr_insert(res,"pss_settlement_consumeraccountauditinfo")); //獲取插入sql
System.out.println(sqlStr_update(res,"a"));  //獲取更新sql
//System.out.println(getPage_list(res, "res"));   //獲取列表頁面的程式碼
//System.out.println(getPage_modify(res, "t"));     //獲取修改頁面的程式碼
//System.out.println(getRequestHandlerParam(filePath));    //通過request獲得頁面的屬性
//System.out.println(setObjParam(res, "marketIncome"));    //獲取設定物件引數程式碼
}
/**
* 把以逗號分隔的欄位名稱,轉換為mybatis插入語句格式
* @param str
* @return
*/
public static String sqlStr_insert(String str,String tableName){
String strs[] =str.split(",");
String resultStr ="";
for(String s : strs){
resultStr=resultStr+"#{"+s+"},";
}
resultStr ="INSERT INTO " +tableName+" ( "+str.substring(0,str.length()-1)+" )\n"+"VALUES (\n"+resultStr.substring(0,resultStr.length()-1)+"\n)";
return resultStr;
}
/**
* 把以逗號分隔的欄位名稱,轉換為mybatis更新語句格式
*/
public static String sqlStr_update(String columnStr,String otherName){
String strs[] = columnStr.split(",");
String resultStr = "";
for(String s : strs){
resultStr=resultStr +otherName+"."+s+" = " +"#{"+s+"},\n";
}
return resultStr;
}
/**
* 把類的屬性拼裝成以逗號分隔的字串
* @param filePath
* @return
*/
    public static String getColumnstr(String filePath){
    String res ="";
        try {
                String encoding="GBK";
                File file=new File(filePath);
                if(file.isFile() && file.exists()){ //判斷檔案是否存在
                    InputStreamReader read = new InputStreamReader(
                    new FileInputStream(file),encoding);//考慮到編碼格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while((lineTxt = bufferedReader.readLine()) != null){
                    if(lineTxt.contains("private")){
                    if(lineTxt.contains("//")){
                    lineTxt=lineTxt.substring(0,lineTxt.indexOf("//"));
                    }
                    String strs []=lineTxt.trim().split("\\s+");
                    res=res+strs[2];
                    }
                    }
                    read.close();
        }else{
            System.out.println("找不到指定的檔案");
        }
        } catch (Exception e) {
            System.out.println("讀取檔案內容出錯");
            e.printStackTrace();
        }
        res =res.replace(";", ",");
     return res;
    }
    /**
     * controller中獲取頁面屬性
     * @param filePath
     * @return
     */
    public static String getRequestHandlerParam(String filePath){
    String res ="";
        try {
                String encoding="GBK";
                File file=new File(filePath);
                if(file.isFile() && file.exists()){ //判斷檔案是否存在
                    InputStreamReader read = new InputStreamReader(
                    new FileInputStream(file),encoding);//考慮到編碼格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while((lineTxt = bufferedReader.readLine()) != null){
                    if(lineTxt.contains("private")){
                    if(lineTxt.contains("//")){
                    lineTxt=lineTxt.substring(0,lineTxt.indexOf("//"));
                    }
                    String strs []=lineTxt.trim().split("\\s+");
                    res=res+strs[1]+" "+strs[2].substring(0,strs[2].length()-1)+" = RequestHandler.get"+strs[1]+"(request,\""+strs[2].substring(0,strs[2].length()-1)+"\");\n";
                    }
                    }
                    read.close();
        }else{
            System.out.println("找不到指定的檔案");
        }
        } catch (Exception e) {
            System.out.println("讀取檔案內容出錯");
            e.printStackTrace();
        }
     return res;
    }
    /**
     * 生成list頁面程式碼
     * @return
     */
    public static String getPage_list(String columnStr,String objName){
    String strs[] =columnStr.split(",");
String resultStr ="";

for(String s : strs){
resultStr=resultStr+"<td style=\"width:10px;\" align=\"center\">${"+objName+"."+s+"}</td>\n";
}
    return resultStr;
    }
    /**
     * 生成modify頁面程式碼
     * @return
     */
    public static String getPage_modify(String columnStr,String objName){
    String strs[] =columnStr.split(",");
    String resultStr ="";
   
    for(String s : strs){
    resultStr=resultStr+"<input type=\"text\" id=\""+s+"\" name=\""+s+"\" value=\"${"+objName+"."+s+"}\" />\n";
    }
    return resultStr;
    }
    /**
     * 生成設定物件引數程式碼
     * @return
     */
    public static String setObjParam(String columnStr,String objName){
    String strs[] =columnStr.split(",");
    String resultStr ="";
    for(String s : strs){
    resultStr=resultStr+objName+".set"+toUpperCaseFirstOne(s)+"("+s+");\n";
    }
    return resultStr;
    }
  //首字母轉小寫
    public static String toLowerCaseFirstOne(String s)
    {
        if(Character.isLowerCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
    }
    //首字母轉大寫
    public static String toUpperCaseFirstOne(String s)
    {
        if(Character.isUpperCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
    }
}

現階段還比較簡陋,生成的程式碼直接去控制檯複製出來就好,以後會優化,不過這樣還真的提升了不少效率,希望對你們也有所幫助!