Board logo

标题: [讨论] 基于SpringSide的代码生成工具实现思路初探 [打印本页]

作者: lovefanx    时间: 2007-4-9 17:47     标题: 基于SpringSide的代码生成工具实现思路初探

最近仔细研究了一下springside,感觉非常好。

最让我觉得舒服的是HibernateEntitiDao和StrutsEntityAction这两个父类,实在太爽了,可以节省不少代码。

假如一个对象的crud代码有50行,如果一个系统有100个基本数据对象,那就能立即节省5000行代码。

 

看了一下helloworld和bookstore的示例代码,第一感觉就是,如果加上一个基于springside的best practice的代码生成工具,那就更好了。

可喜的是,我马上就发现论坛上susu兄弟贴出了他的代码生成的工具,借助FreeMarker实现,和我的思路一样。

 

今天仔细研究了一下susu的代码生成工工具,发现目前功能还是有所欠缺(susu,此处希望和你探讨相关问题,无贬低之意,请海涵)。

1、生成的代码,无法按照数据库中的表直接生成。

2、生成的代码,每个对象的属性都是一样的,还需要一个一个去修改,比较麻烦。

 

所以,在此提出我的一点想法或者说思路,供有志于代码生成的兄弟参考一二。

1、生成工具最好能够基于jdbc实现,直接分析数据库结构。

2、生成工具必须能够生成对应数据库表的对象的model类、action类、service类。生成后无需修改就能达到ss中helloword的效果。

3、生成工具必须能够自动识别主键,以便于在对应的get方法前加上@ID等标记

4、生成工具也必须能够自动识别非主键列,并且自动产生对应的方法和Annotation标记。例如如果一个字段为login_name,对应的类的属性应该为loginName,而对应的标记为@column (name="login_name")

5、对于生成的页面,最好能够直接生成对应的页面上列表的表头。这里我一个想法就是利用数据库中列的备注属性来实现。希望达到的效果就是userList.jsp这样的页面,在生成代码的时候,列表的表头上,生成显示的是对应的中文,而不是英文列名(当然,如果列注释是英文,就显示英文)。

6、最好是能基于eclipse的插件实现图形界面,这样操作起来更加简单。

7、剩下的就比较难了,例如自动产生many-to-one和one-to-many的设置,现在还没很好的思路,需要仔细考虑考虑再说了。

 

 

susu兄弟,上述观点,欢迎拍转,也许对你有用。希望看到你的最新版本。

 

 


作者: suwu    时间: 2007-4-9 19:30

哈哈,,,有兄弟能关注我的东东,我高兴都来不及了,

我估计你看的是我很早前写的代码,那时是一些想法,

也确实是只能生成每个对象一样的,且也没法从数据库里生成。

 

但我在4月4号时发布了最新的版本,说真的,蛮郁闷的,因为没人关注。呵呵。

 

这个新的版本,实现的思路依然是使用freemarker来写模板,fmpp来生成。

只要是通过简单的配置一个xml文件,来生成springside项目需要的所有东西。

这个新的版本,重点解决的是实体的属性可自定义,实体的关联关系(onetoone,onetomany,manytoone,manytomany)都支持,我已测过,可以正确工作。

 

另外,也能根据定义的xml文件生成相应数据库schema。

 

同时,能支持选用ibatis或是hibernate作为数据库访问层

对于ibatis则是sqlmap.xml文件的生成。对于hibernate则是annotation的生成,(目前生成的annotation并不多,只是一些常用的annotation,并不是所有的annotation都支持,但是我觉得在项目前期这些应已够了)

请看这里:

jwgen0.9.1增加支持hibernate

http://forum.springside.org.cn/viewthread.php?tid=2080&extra=page%3D1

 

另外,对于view,我的计划是会以功能模块生成,目的是代码复用。

 

另外,我是觉得通过数据库表来生成项目比定义xml文件要麻烦一些,其一是实现难(我写java代码很水的),其二是不好扩展,所以我也写了一个简单的通过定义的xml来生成数据库schema的功能。其三是hibernate tools已能根据数据表生成实体及相应的annotation了,我不认为自已能写出比hibernate tools更好的。而ibatis也有相应的根据数据表生成sqlmap.xml的工具。

 

在我的想法中,我是计划还需要对ss中的所有模块都作支持的,现在打好基础,也确定这种通过freemarker模板生成是可行的,下步是打算整进acegi的支持。

 

说他扩展方便是,我随时都可以在xml中加上更多的节,以便其他模块用。

开发者也可以添加自已的需要的节,以用于自已编写的模板。

 

ss自已的代码生成工具不知猴年马月才能出来,急着想用的同学,可以先试试兄弟的这个小工具。呵呵

 

lovefanx兄弟,我是suwu不是susu。呵呵

 

[ 本帖最后由 suwu 于 2007-4-9 19:36 编辑 ]
作者: cctvx1    时间: 2007-4-9 22:13

freemarker在模板引擎方面应该说还是比较好的,在公司有几个小的工具都是SWT作GUI,后台生成代码全都基于freemarker,

 

加上Ant的调用,感觉不错,另外在与数据库打交道部分关键就是metadata,因为很多metadata都是依赖于具体数据库的,因此往往通过类似于参数

 

的形式,让程序能够另外的在几大数据库之间切换,当然在metadata掌握好了之后,可能更多的就是在many to one ,one to one这些上面,如果全部依靠metadata

 

那么肯定要对于具体的数据库的一些系统表有所了解,这里我更倾向用GUI来 让用户来定义关系。至于其他的类似于Action,Bean,XML配置这些当对于来说到是

 

更为简单些。

 

 






欢迎光临 SpringSide中文论坛 (http://forum.springside.org.cn/) Powered by Discuz! 5.0.0