天天看点

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;

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"));    //获取设置对象参数代码

}

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;

}

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;

}

    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;

    }

    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;

    }

    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;

    }

    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;

    }

    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();

    }

}

现阶段还比较简陋,生成的代码直接去控制台复制出来就好,以后会优化,不过这样还真的提升了不少效率,希望对你们也有所帮助!