??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
http://orm.aquatool.org/nl/zh/CN/index.html
下面是它的基本功能介l?
我自己已l申请了一个域名,L在国外,q步自q开源品及相应的书攑ֈ上面QSVN的徏立还在研I中?br />
大家可以通过http://orm.aquatool.org/nl/zh/CN/来访问这个地址Q上面有在线文Q不需要下载Y件即可了解Y件?br />
有兴的朋友Q可以通过下蝲RCP版本来试用,晚一Ҏ(gu)会徏立论坛及MailListQ希望大家可以提供更多的意见?br />
文g比较大,大概有近20MQ用Zip压羃?/p>
现在发布的是Beta版,SourceForge上面的空间正在申诗?br /> 发布的版本,支持Eclipse3.2和Eclipse3.3Q需要GEF插gQ可以在1.4?.5下运行(我只试了Sun JDK1.4和JDK1.5的三个版本,q不保证所有的JDK都能q行Q?br /> RCP版本正整理中Q国庆前发布?br /> 如果有问题,La
以下是工L介绍
Aquarius ORM Studio介绍
从事软g开发多q_感觉数据库在整个软g开发过E中扮演一个不可或~的角色。一旦一个业务项目进入立wD,需要支持哪些数据库q_Q如何用该U数据库q_都将成ؓ架构师需要考虑的内容,对于一般的开发h员,则可能根据需要徏立各U数据表Q还可能需要通过反向工程来了解现有数据库的架构,随着ORM工具的流行,E序员还需要将数据表映到cMQƈ保证两者间的同步,q去几年从事相应工作的经验告诉我Q这既不是一个轻杄事情Q更不是一件o人感觉愉快的事情。同时市Z有大量优U的数据库工具Q从建模到分析,q有ORMQ但可惜的是Q大部分优秀的工具都不是免费的,像最有名的PowerDesignerQ其h令我咋舌。象 PowerDesignerq么强大的工P我只能用到其中一部分功能Q却要付出所有的hQ而且功能却没有满的我的需要?br />
所以我萌生了根据自q需求来开发一个数据库 工具的想法,q在接下来的两年中付诸实施。这个工hUCؓAquarius Orm StudioQAquarius是水瓶Q我的星座,ORM是指q个工具的一个重要功能,Studio是个行词?br />
q个工具可以完成以下功能:
数据库正向徏模(支持数据表,存储q程Q视图)Qƈ生成相关DDL
数据库反向工E,支持从数据库导入数据表,存储q程Q视囄数据库元?
支持多数据^収ͼ包括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql{?
生成试数据Q可以根据数据库模型生成试数据Q方便进行单元测试?
生成相应ORM代码及配|文Ӟ支持Hibernate3,OJB,IBatis及OpenJPA
支持多国语言Q包括中文(体,台湾J体Q香港繁体)Q英文,日文Q谢谢Judy.Chang的日文翻译)
下蝲地址
另外做个预告:
本周内将发布我的一个Eclipse数据库插ӞU?00K行代码)Q支持以下功?
1、数据库正向建模Q支持数据表Q存储过E,视图Q,q生成相关DDL
2、数据库反向工程Q支持从数据库导入数据表Q存储过E,视图{数据库元素
3、多数据q_Q包括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql{?
4、生成测试数据,可以Ҏ(gu)数据库模型生成测试数据,方便q行单元试?
5、生成相应ORM代码及配|文Ӟ支持Hibernate3,OJB,IBatis及OpenJPA
以下是ؓIBatis生成的XML:
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<sql id="selectUserWhere">
<dynamic prepend="where">
..q里省略部分内容
</isPropertyAvailable>
<isPropertyAvailable prepend="or" property="user_Or_NotNull_State"><![CDATA[STATE_C is not null]]>
</isPropertyAvailable>
</dynamic>
</sql>
<delete id="deleteUser" parameterClass="String"><![CDATA[
Delete From demo.user_t
Where USER_ID=#userId#
]]>
</delete>
<select id="getUserRolesByUser" parameterClass="String" resultMap="userRoleResult"><![CDATA[
Select USER_ID, ROLE_ID from demo.user_role_t
Where USER_ID=#userId#
]]>
</select>
<select id="doCountUser" parameterClass="java.util.Map" resultClass="int"><![CDATA[
Select count(*) From demo.user_t
$Where$ $condition$]]>
</select>
<update id="updateUser" parameterClass="user"><![CDATA[
Update demo.user_t SET USER_ID=#userId# , USER_NAME=#userName# , PASSWORD=#password# , VALID_FROM=#validFrom# , VALID_TO=#validTo# , TITLE=#title# , DESCRIPTION=#description# , DOMAIN_C=#domain# , GROUP_C=#group# , ORDER_C=#order# , STATE_C=#state# Where USER_ID=#userId#
]]>
</update>
<insert id="insertUser" parameterClass="user"><![CDATA[
Insert Into demo.user_t(USER_ID , USER_NAME , PASSWORD , VALID_FROM , VALID_TO , TITLE , DESCRIPTION , DOMAIN_C , GROUP_C , ORDER_C , STATE_C)
Values(#userId# , #userName# , #password# , #validFrom# , #validTo# , #title# , #description# , #domain# , #group# , #order# , #state#)
]]>
</insert>
<select id="doSelectUser" parameterClass="java.util.Map" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
$Where$ $condition$]]>
</select>
<select id="selectUser" parameterClass="java.util.Map" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
]]>
<include refid="selectUserWhere"/>
</select>
<select id="selectUserByID" parameterClass="String" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
Where USER_ID=#userId#
]]>
</select>
<select id="doDeleteUser" parameterClass="java.util.Map"><![CDATA[
Delete From demo.user_t
$Where$ $condition$]]>
</select>
<delete id="deleteUserByID" parameterClass="String"><![CDATA[
Delete From demo.user_t
]]>
<include refid="selectUserWhere"/>
</delete>
</sqlMap>
q些源代码不再需要额外的付出QQ何h都可以下载,当作《Wicket开发指南》一书全文下载不方便的一些补偿吧?/p>
下面是下载地址Q?br />http://gocom.primeton.com/modules/newbb/titleflat_5087_41.htm
你也可以在这个论坛上提出问题Q我会尽快回?br />http://gocom.primeton.com/modules/newbb/viewforum41.htm
One World,One Dream?/p>
Wicket前生后世?/font>
Wicket是什?单点_它就是一个基于Java的Web开发框Ӟ与StrutsQWebWorkQTapestry相类伹{其特点在于对Html和代码进行了有效的分(有利于程序员和美工的合作Q,Z规则的配|?减少了XML{配|文件的使用)Q学习曲U较低(开发方式与C/S怼Q,更加易于调试Q错误类型比较少Ҏ(gu)Q而且Ҏ(gu)定位Q。如果你不对微Yq不反感Q可以把它看作Javaq_上的ASP.NET?br /> Wicket现在是Sourceforge上一个非常活跃的目Q开发源码基于Apache协议Q也是最宽松Q对商业最友好的的源码协议Q,目位于http://wicket.sourceforge.netQ另外它q有一个独立的域名|站http://www.wicketframework.org/。最新的消息则是QWicket已经成ؓApache孵化器中一个项目,可以通过http://incubator.apache.org/projects/wicket.html来访问。但SourceForge上的|站仍然可以讉K?br /> Wicket出现Ӟ著名的J2EE|站TSSQ即http://www.TheServerSide.comQ以后简UTSSQ,对该目也进行了讨论Q有一D|日持久的论战Q地址Q?a >http://www.theserverside.com/news/thread.tss?thread_id=28162:Q,论战d当然是Wicket的主要作者Jonathan Locke和Tapestry的作者Howard Lewis Ship Q争论的内容十分q泛Q从URL的格式到pȝl构Q从扩展性到界面开发,如果有时间的话,我尽量将其中部分内容译q来Q还是很_ֽ的。(TSS上很多的讨论都非常精彩,如果英文好的话,l常上去看看Q国外的牛h是多啊。有时候我也觉得很奇怪,q些人都不用睡觉的吗Q看他们的帖子,完全覆盖?4时Q感觉他们的老板真是宽容啊)?br /> Wicket的作者中有几个是原Sun公司Swing组的开发h员(现在可能大部分已l不是了Q,因此Wicket的框架中带有厚的C/S色彩。而他们的开发计划中Q还包括了SwingQFlashq_的支持,也就是说使用Wicket不仅可以可以输出HtmlQ而且可以支持Swing和FlashQ不q和朋友l过讨论后,觉得q个计划看v来有一点不切实际,毕竟HtmlQSwingQFlash之间的差别还是很大,恐怕想要无~移植,q是有点隑ֺ的。单是一个JavaScriptQ恐怕就够头痛了?br /> Wicket带有强烈C/Sl构的UI色彩Q这一Ҏ(gu)助于工和程序h员的分工Q与Delphi的开发方式非常类|Delphi使用.frm文g保存UI控g的定义,而用.pas文g存储代码Q从而对控gq行操作Q。Wicket则是使用Html描述UIQƈ具有特D标记的Html元素定义为UI控gQ在java文g中则直接使用代码操作q些UI控gQ控制其输出及行为,样式{。这一点和TapestryQ以?NETq_上的ASP.NET极ؓ怼Q也怪不得与Tapestry的作者争Zq么久,毕竟两者的用户有很多的重复。其实从l构上看来,无论是TapestryQASP.NetQWicket估计都借鉴了Appletq_上的WebObjectsQ还有Delphi。(不要忘了QDelphi的创Anders Hejlsberg是.net框架的架构师Q所以C#和Asp.net怎么看都带着Delphi的媄子?br /> Wicket目前最新的版本?.2.2版,已经支持了AJAXQ但感觉q个框架的发展时间毕竟还是短了一点,管设计思想很不错,但还是有许多问题存在的,包括控g的数量,BUG较多{,希望2006q它可以快的成熟v来?br />
关于重新发明轮子的争?/font>
谈到WicketQ恐怕第一个感觉就是在Java的Web开发中又多了一个轮子,q一点国内外的程序员好象都是一栗?br /> 有一个国外的Blog专门写了一关于轮子的文章Q说明了重复发明轮子的必要性。我个h对于q种轮子是持一U欢q的态度Q因为没有h会去写一D功能完全一L东东QL要修正了原有轮子的不Iq样׃能简单当作一U重复?br /> 即是功能重复,׃需要轮子了?JSP能完成Struts到所有功能,而Tapestry能做到的QStruts也全部可以做刎ͼ但StrutsQTapestry׃需要了?Struts的MVCl构比JSP更加优秀Q在很大E度上减M开发h员开发量Q而TapestryZlg的开发方式,则是开创了一U新的Web开发方式,对于多语a的支持也有了新的方式。以往开发多语言面Ӟ往往使用properties保存字符串资源,但是面通常都没有什么变化。而Tapestry可以通过不同的HtmlZ同的国家指定不同的页面?br /> Wicket吸收了Tapestry的一部分内容Q但我最喜欢的就是,它是Z规则的,而ƈ非XML配置的方式,q不仅有利于E序员学习,对系l的l护及开发规范都很有效,毕竟XML的编写ƈ不见得就比写一D늨序来得更Ҏ(gu)。(q里插一句题外话Q我觉得XML文g用来表示数据和资源,而不是行为,更不是业务,所以对于XML我只用来存放多语a资源或者用来做数据交换。象Springq种大量使用XML方式Q我q不ƣ赏QSpring也意识到了这一点,?.0版本中努力的化Xml的配|,但是q不如人意Q。如果用简单的规则来配|或者管理一个系l,用户׃很容易的查找到自己需要的内容。而通过配置文gQ不这L一个配|文件的l构如何好,也需要在其中查找自己需要的内容Q开发效率肯定要低一些?br /> 因此对于q种有创新性的轮子Q多几个Q或许Java世界可以跑得更快一些?br /> d听说不Web框架的开发h员要联合h开一个Web框架Q在Yahoo上还有一个讨论组Q上ȝ了一下。但是这个事件对我的W一感觉是晕,W二感觉是特别的晕Q虽然目前Java世界的Web框架一通战,但这样一个联盟,所l出的东西很可能是第二个EJB?/p>