自己写的JAVABEAN自动生成器

  最近我在学习JSP,可是在每次写JAVABEAN的时候,都发现好麻烦,要去写一大堆的GET和SET方法,听说ECLIPSE里面有自动生成的功能,我何不自己写一个。

  首选我定义了一个Attribute类,用来存放属性信息(类型和名字)以及为它们生成GET/SET方法。

package Utils.AutoBean;
import java.util.*;

class Attribute
{
 private String type;    //属性的类型
 private String name;    //属性的名字
 private StringBuffer get = new StringBuffer();  //为属性生成的GET方法
 private StringBuffer set = new StringBuffer();  //为属性生成的SET方法
 private int getCount = 0;       //标记变量,保证只生成一次
 private int setCount = 0;

 /**
 *生成属性的set方法
 */
 private void generateSet()
 {
  if (setCount > 0)
  {
   return;
  }
  setCount++;
  set.append("/tpublic void set");
  //将属性名第一个字母置为大写
  set.append(name.substring(0, 1).toUpperCase() + name.substring(1, name.length()));
  set.append("(" + type + " " + name + ")/n/t{/n");
  set.append("/t/tthis." + name + " = " + name + ";/n");
  set.append("/t}/n/n");
 }

 /**
 *生成属性的get方法
 */
 private void generateGet()
 {
  if (getCount > 0)
  {
   return;
  }
  getCount++;
  get.append("/tpublic " + type + " get");
  //将属性名第一个字母置为大写
  get.append(name.substring(0, 1).toUpperCase() + name.substring(1, name.length()));
  get.append("()/n/t{/n");
  get.append("/t/treturn " + name + ";/n");
  get.append("/t}/n/n");
 }

 /**
 *生成属性的set和get方法
 */
 private void generateBean()
 {
  //生成 set 方法
  generateSet();
  //生成 get 方法
  generateGet();
 }

 /**
 *获取属性的GET 和 SET 方法
 */
 public StringBuffer getBean()
 {
  generateBean();
  StringBuffer sb = new StringBuffer();
  sb.append(set);
  sb.append(get);
  return sb;
 }

 /**
 *获取属性的get方法
 */
 public StringBuffer getGet()
 {
  generateGet();
  return get;
 }

 /**
 *获取属性的set方法
 */
 public StringBuffer getSet()
 {
  generateSet();
  return set;
 }

 /**
 *构造函数,传入参数为属性的类型和名字
 *@param type 属性的类型
 *@param name 属性的名字
 */
 public Attribute(String type, String name)
 {
  this.type = type;
  this.name = name;
 }

 public void setType(String type)
 {
  this.type = type;
 }

 public void setName(String name)
 {
  this.name = name;
 }

 public String getType()
 {
  return type;
 }

 public String getName()
 {
  return name;
 }
};

下面就是自动生成JAVABEAN的类AutoBean

package Utils.AutoBean;
import java.util.*;
import java.io.*;

public class AutoBean
{
 private Stack attr = new Stack();     //属性对象栈
 private ArrayList strList = new ArrayList();  //属性行容器
 private BufferedReader in = null;
 private PrintWriter out = null;
 private StringBuffer text = new StringBuffer();  //最终文本

 /**
 *构造函数
 *@param path 要生成JAVABEAN的JAVA文件路径
 */
 public AutoBean(String path)
 {
  String s = "";
  try
  {
   in = new BufferedReader(new FileReader(path));
   while ((s = in.readLine()) != null)
   {
    //将类的属性声明保存在text中
    text.append(s + "/n");
    //将每一行入队列
    strList.add(s);
   }
   in.close();
   //去除类定义从最后一个"}"开始的字符串
   int lst = text.lastIndexOf("}");
   if (lst == -1)
   {
    System.out.println("Error : Not a correct java file!");
    System.exit(1);
   }
   text = new StringBuffer(text.substring(0, lst));
   text.append("/n");
   out = new PrintWriter(new BufferedWriter(new FileWriter(path)));
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }

 /**
 *将属性从每一行的文本中分割出来,并构造属性对象后入栈
 */
 private void cutAttr()
 {
  int index = 0;
  String s = "";
  for (int i = 0 ;i < strList.size() ;i++ )
  {
   s = (String)strList.get(i);
   //先去掉头尾的空格 
   s = s.trim();

   if (s == "")
   {//去除空行
    continue;
   }

   if (s.startsWith("package") || s.startsWith("import") || (s.indexOf("class") != -1 && s.indexOf(";") == -1)
    || s.startsWith("/*") || s.startsWith("*/") || s.startsWith("//")
    || s.startsWith("{") || s.startsWith("}"))
   {//去除注释、包、类定义等
    continue;
   }
   if (s.indexOf(";") == -1)
   {//去除非分号结尾的行
    continue;
   }
   
   //找到最后一个空格,则从它开始至结尾前一个为属性名
   int last = s.lastIndexOf(" ");
   String name = s.substring(last + 1, s.length() - 1);
   //倒数第一与倒数第二空格之前是属性类型
   int backTwo = s.lastIndexOf(" ",last - 1);
   String type = s.substring(backTwo + 1, last);
   //将每个属性对象入栈
   attr.push(new Attribute(type, name));
  }
 }

 /**
 *生成JAVA文件的JAVABEAN形式的字符串,并将源文件改变
 */
 public void generateBean()
 {
  cutAttr();
  Attribute tmp;

  while (!attr.empty())
  {
   tmp = (Attribute)attr.pop();
   text.append(tmp.getBean());
  }
  //将"}"加入到末尾
  text.append("}/n");
  writeBack();
 }

 /**
 *写回到文件
 */
 private void writeBack()
 {
  out.print(text.toString());
  out.close();
 }
}

这里面我只考虑了一个没有写任何属性的BEAN的一个简单JAVA文件,并且要求代码的格式要基本上标准的。

下面的代码是用来测试AutoBean的,测试结果完全正常。

当然,我并没有考虑太多的特殊情况,因为暂时来讲只是我自己偷懒用的,所以测试也不完全。因为只要我的输入格式正确了,它就能很好的工作。

如果有时间的话,我会把它改进,让它能接收更一般的格式,考虑更多的情况,能够定制对哪些属性分别生成只哪些方法等等。或者再给它加上一个界面,做成一个小应用程序发到网上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客地址:http://blog.csdn.net/vipbooks 一直以来把数据库的表转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个表的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing了一个通过数据库的表生成JavaBean工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,支持精确指定只生成哪几个表的Bean,也支持模糊查找生成哪几个表的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表! 第12版更新震撼发布,此次版本更新如下: 1、新增参数配置管理功能,可以为不同的项目配置不同的参数。 2、新增快速新增参数配置功能,快速为项目添加参数配置。 3、新增选择实体注解功能,生成实体的时候自动为实体添加额外的注解。 4、弹出对话框界面大小调整。 5、新增数据源添加默认设置。 6、精确匹配在点更多时,已选中的表会在弹出的列表中被勾选中。 7、修复模糊匹配找不到表的Bug。 8、其他一些小Bug的修改和代码优化调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值