java简易代码生成器V1版本

原创 2016年08月29日 16:22:24

不知道大家有没有同感,日常工作中,有好多重复的工作,大多数都是在复制粘贴,只是操作的对象实体不同,每个模块最后变成了只是修改一下其中的属性,剩下的增删改查完全都是一样的,但就是修改这些属性简直是烦的要死,一个类里面要是有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();
    }
}


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

版权声明:本文为博主原创文章,未经博主允许不得转载。

java版本生成唯一编号的程序

  • 2013年11月10日 12:51
  • 4KB
  • 下载

Java实现比较版本号

涉及到客户端的系统中经常需要用到比较版本号的功能,但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法; 这就需要我们总结版本号的通用规则,设计一个比较算法并封装成通用方法来使...
  • sowhat_Ah
  • sowhat_Ah
  • 2015年02月26日 18:04
  • 37431

Java自动生成H5游戏资源版文件的版本号

  • 2017年08月16日 21:59
  • 29KB
  • 下载

JAVA版本的生成唯一编号

  • 2009年08月14日 15:58
  • 1KB
  • 下载

Android之版本-APP编译时自动生成版本号

近期有一个工作任务:按照某个规则,给Android应用设置一个在编译时自动生成的versionCode与versionName。 这一点倒是不奇怪,很多正式的应用都有自己的一套版本号管理。市面上什么...
  • lqhed
  • lqhed
  • 2016年12月07日 11:54
  • 1193

java中自动生成编码,例如18位,20位等

/*** * * getCommonBh:(获得通用的编号:前缀(一般是单位的前N位+当前时间(自定义格式)+格式化的sequence值:00001)). * @au...
  • u011410254
  • u011410254
  • 2015年07月21日 20:27
  • 5943

Java自动生成H5游戏资源版文件的版本号

版本号自动化需求H5游戏的庞大资源,每个资源的版本号不可能是手动维护,必须采用脚本或者软件来自动生成。具体的版本号管理的问题,可以看我上篇文章:H5手游页游的资源版本管理。本文主要是用java实现了读...
  • sujun10
  • sujun10
  • 2017年08月16日 23:24
  • 2694

Android应用编译时自动生成版本号

省去自己修改版本号,按照某个规则,给Android应用设置一个在编译时自动生成的versionCode与versionName。...
  • a12331244
  • a12331244
  • 2017年05月02日 13:20
  • 493

java代码版生成器

楼主的开发环境:      前端:Easyui      数据库:MongoDB      项目框架:SpringMVC 首先下载Freemarker的jar包代码生成器必备jar包:Free...
  • xb12369
  • xb12369
  • 2016年02月26日 17:44
  • 2452

【JAVA实例】代码生成器的原理讲解以及实际使用

原理:利用Freemarker技术,通过java加载Freemarker模板,将前台输入的参数填入模板里面,通过FileZip压缩一个zip包,然后自动下载下来 1.预先定义好模板 ...
  • jxausea
  • jxausea
  • 2016年04月30日 08:09
  • 2085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java简易代码生成器V1版本
举报原因:
原因补充:

(最多只允许输入30个字)