在这个游戏中,我们的任务是搭建一个被称为Open 18的社区,这个社区里住的都是快乐的golf爱好者。Golf这种运动域对象模型丰富,非常适合展示seam的特性。第一关中,我们要对已有的database schema进行反向工程,创建这个社区程序的原型。作者认为这个场景会让我们学会使用seam-gen这个上古神器,大菠萝中一开始可是只给个小木头棍子啊!有了seam-gen,我们就不用为组织新项目这个艰巨而又无聊的任务发愁了!而且,他能解决基础的数据库CRUD应用需求。有了这个原型之后,添加其他功能的剧情发展就比较自由了。其中的任务大致包括增加数据输入向导、球场特性对比、比分记录跟踪、球场收藏夹、email注册、PDF记分卡等。
如果你想跟随我们搭建这个社区,那你得在你的硬盘里给seam和他的支持类库们找个落脚的地方。附录A中有个搭建seam的秘笈,你最好按照秘笈的指示去准备一下,这样就可以和我们一起出发了!
把线路图拿出来,看看我们的目标在哪里,再听作者讲讲seam-gen怎么帮我们来搞定他!
我数到3,请你进入角色
想象一下你是在一个阳光明媚的初夏午后(外面挺冷,这有点难),周三啦,还有两天就放假了。你刚刚跟“Golf Haven”订好了场地,准备着开始你的年度golf大逃亡呢!当你还沉浸在潇洒挥杆引无数MM尽折腰的幻想中的时候,BOSS出现了,它拍了拍你的肩膀!
别做白日梦了,站在你面前的可是BOSS啊,再不醒你就要挂了!黎叔很严肃的说,刚刚的群雄大会上有人提醒他,几个月前就该搞完的那个web程序还没影子呢!紧张和不安在你的体内蔓延开来。。。
销售团队希望在今年最大的交易展会上推出一个能访问公司的golf球场数据库的程序,不幸的是这个展会就在本周末开始。除了这个程序,他们没什么新东西了。让他们两手空空的去参加展会,不仅影响公司形象,还会损及公司信誉!事情发展到这个地步,应该解雇你的经理。但现实不会按你的期望发展,并且这种发展也不会带给你什么好处。现在,必须有人把帽子放在桌上,然后从里面拎出只兔子来。这个英雄就是你!
如果这事儿搁在别的时候,不过是在你的那些烦心事里面再加一件而已。可现在,如果不能完成任务,你那热望了许久的假期可能就要泡汤了。一想到不能在破晓的时候站在第一个tee前面,不能置身于挂满露珠,富有禅意的风景中,你几乎马上就要死去了!谁让你天生就是个英雄呢,所以,还是先天下之忧而忧,后天下之乐而乐,在周末之前鼓捣个原型出来先吧!
问题是,你的乾坤袋里没有能让时间停止的法宝,你也不是Ando!还好,你刚听说用seam-gen可以咻的一下整出一个还看得过去的Java EE 5应用程序来,所以,你决定试一下(这傻小子和我一样,什么都敢干啊!其实appfuse的gen也挺好用的)。剩下的问题就是需求了,正好,BOSS的邮件到了:
现在需求有了。接下来该着手处理数据库了。 你需要和DBA安排一次会面,坐下来聊聊那个古老的话题:是现有entity还是先有schema。
把entities映射到database schema上
写程序总会遇到两种开发情况:自底向上和自顶向下。两者间的区别就是谁先到,数据库表还是entity 类。
如果数据库schema先出来,那就是自底向上。schema基本上确定了entity class是什么样的。另一方面,如果entity class先出来,就是自顶向下。class控制着数据库schema如何设计。Hibernate之类的ORM工具为你的java class映射到database增加了些灵活性。比如说,你可以在不改变class 属性名称的情况下改变该属性对应的列名。然而,这种自由也是有限的,两者之间的偏离不能太大。他们两个先入为主,小的就得听大的使唤。作为程序员,谁先来你都要能伺候。seam-gen也是两样都行的。但在这一章,我们用自底向上,从数据库表创建java类。第四章,会展示下自顶向下,用golefer档案扩展数据库schema。
自底向上
在这个自底向上的开发过程中,你要根据5个数据库表生成5个实体类。上片:
用seam-gen完成数据库表到java类的映射很简单,不像听起来那么麻烦。
搭建H2的过程。。。。。。
检查schema
访问H2的过程。。。。。。