分享
 
 
 

利用awk自动生成DTO

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

大多用于ejb开发的工具都支持dto的自动生成,前提是必须已经存在对应的实体bean。在没有实体bean时,就得我们自己敲那些繁琐无聊毫无意义的代码。这种情况下,这个awk script也许可以帮点忙。 如果你不了解awk,可以去

http://www-900.ibm.com/developerWorks/cn/linux/shell/awk/awk-1/index.shtml

http://www-900.ibm.com/developerWorks/cn/linux/shell/awk/awk-2/index.shtml

http://www-900.ibm.com/developerWorks/cn/linux/shell/awk/awk-3/index.shtml

看看. 如果用的是windows,要想运行这个script,需要去down一个名为awk.exe的解释程序。

对文本要求的格式:

第一行 是 dto 的名字,

其余行 是"类型-变量名"对, 注意别加分号!

如下例:

User_DTO

int id

String name

Collection friends

以下斜体部分是script正文:

BEGIN{

count =0 ;

}

{

if(NF==2)

{

arr[count,0] = $1;

arr[count,1] = $2;

#print arr[count,0], arr[count,1], count;

count++;

}

if(NF==1)

dto = $1;

}

END{

printf("/* DTO created by awk*/\n\n");

printf("/*@todo Complete package & import here*/\n\n");

printf("public class %s implements Serializable\n{\n", dto);

for ( i=0; i< count; i++ ) {

x = arr[i,1];

arrx = arr[i,0];

printf("\tprivate %s %s;\n", arrx, x);

}

printf("\n\n");

printf("\tpublic %s()\n\t{\n\t}\n\n", dto);

printf("\tpublic %s(", dto);

for ( i=0; i< count; i++ ) {

x = arr[i,1];

arrx = arr[i,0];

printf("%s %s", arrx, x);

if(i!=count-1)

printf(", ");

}

printf(")\n\t{\n");

for ( i=0; i< count; i++ ) {

x = arr[i,1];

arrx = arr[i,0];

printf("\t\tthis.%s = %s;\n", x, x);

}

printf("\t}\n\n");

# setters & getters

for ( i=0; i< count; i++ ) {

x = arr[i,1];

arrx = arr[i,0];

xHead = toupper(substr(x,1,1));

xBody= substr(x,2,length(x)-1);

printf("\tpublic void set%s%s(%s %s)\n\t{\n", xHead, xBody, arrx, x);

printf("\t\tthis.%s = %s;\n", x, x);

printf("\t}\n\n");

printf("\tpublic %s get%s%s()\n\t{\n", arrx, xHead, xBody, arrx, x);

printf("\t\treturn %s;\n", x);

printf("\t}\n\n");

}

# equals

printf("\n\n");

printf("\tpublic boolean equals(Object obj)\n\t{\n");

printf("\t\tif (obj != null)\n\t\t{\n");

printf("\t\t\tif (this.getClass().equals(obj.getClass()))\n\t\t\t{\n");

printf("\t\t\t\t%s that = (%s) obj;\n", dto, dto);

printf("\t\t\t\treturn \n");

for ( i=0; i< count; i++ ) {

x = arr[i,1];

arrx = arr[i,0];

xHead = toupper(substr(x,1,1));

xBody= substr(x,2,length(x)-1);

if(arrx=="byte" || arrx=="char" || arrx=="int" || arrx=="long" || arrx=="float" || arrx=="double" || arrx=="boolean" )

{

printf("\t\t\t\t\tthis.get%s%s() == that.get%s%s() ", xHead, xBody, xHead, xBody);

}else

{

printf("\t\t\t\t\t(((this.get%s%s() == null) && (that.get%s%s() == null)) ||\n", xHead, xBody, xHead, xBody);

printf("\t\t\t\t\t\t(this.get%s%s() != null && this.get%s%s().equals(that.get%s%s())))", xHead, xBody, xHead, xBody, xHead, xBody);

}

if(i!=count-1)

printf(" && \n");

else

printf(";\n");

}

printf("\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n");

# hashCode()

printf("\tpublic int hashCode()\n\t{\n");

printf("\t\treturn (");

for ( i=0; i< count; i++ ) {

x = arr[i,1];

if(i!=0)

printf(" + ");

printf("\"\" + %s", x);

}

printf(").hashCode();");

printf("\n\t}\n\n");

# toString()

printf("\tpublic String toString()\n\t{\n");

printf("\t\treturn ");

for ( i=0; i< count; i++ ) {

x = arr[i,1];

if(i==0)

printf("\"\" + ");

else

printf(" + \",\" + ");

printf("%s", x);

}

printf(";");

printf("\n\t}\n\n");

printf("}");

}

#########################################################

# 如果有bug,请告诉我,thanks! :)

# Ed Yan, msn/email: huidaoren@hotmail.com

# 2004.03.30

#########################################################

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有