转:传智播客—jbpm与OA项目(四)

系统 1942 0

上一节课我们已经完成了 OA 项目的基础部分,对 DAO BEAN 的基本操作。今日开始学习 OA 项目中“组织管理”这一部分。在学习的过程中,整体上难度相对比较简单,更多的是项目经验上的学习。但在配置 hibernate 的映射文件时,大家有些应付不来。我也不例外,一对一映射关系我掌握的不好。但汤兄弟为人正直、善良,他在晚上下课后给我们被了    

 

这个项目虽然未详细涉及企业项目开发中各方面细节,但整个框架是按照这个流程走的。

 

组织机构部分

一、设计部分

1. 了解需求:

我们没有进行详细的需求分析,汤兄弟在前天给我发了一个完成的页面层(静态页面)。需求一眼就看穿了。

1)          部门管理:增、删、改、查、(子部门)

2)          岗位管理:增、删、改、查

3)          员工管理:增、删、改、查

 

正如你所看到的,搞应用不就是对数据库的增、删、改、查吗? Java 将应用做的十分好,而且在继续发展。哦!这些对她来说太简单了。

 

2. 设计实体

设计实体的两种方式:

1)          对象 --> 表:正向工程。(推荐)

2)          --> 对象:反向工程。

 

 

在早之前的开发中,常见的是第二种方式先设计数据表格,然后再编程定接口。但随着 Java 的日益强大,这一过程被反过来了。面向对象的似乎还有很大的潜力!

 

设计实体时,我们需要考虑用到了哪些(几个)实体?实体之间的关系是什么?实体具有哪些属性?我们所说的实体就是 Bean 。汤兄弟使用 StarUML 给大家把所有的实体和实体之间的关系画了出来,我十分喜欢画图,感觉似乎比编码好多了。我在下面也跟着汤兄弟把图画出来了:

 

clip_image002

 

然后 UML 课程在 OA 项目之后,但看着这图多专业 ~~ !!

 

我们的实现流程:

设计实体 -->JavaBean--> 映射文件 --> 生成表 -->...

 

设计实体 -->JavaBean 都比较容易,因为我们使用了 hibernate 所以生成表也不需要我们来做了。这个流程中最为复杂的是映射文件。因为 hibernate 才讲了三天, OA 项目中算是第一次应用 hibernate 写东西。

 

部门实体的映射文件( department ):

< class name = "Department" table = "ccoa_department" >

    < id name = "id" column = "id" >

        < generator class = "native" />

    </ id >

    < property name = "name" />

    <!-- 与上级部门(多对一) -->

    < many-to-one name = "parent" column = "parentId" class = "Department" />

    <!-- 与子部门(一对多) -->        

     < set name = "children" >

         < key column = "parentId" />

         < one-to-many class = "Department" />

     </ set >

    <!-- 部门与员工(一对多关系映射) -->

    < set name = "employees" >

        < key column = "departmentId" />

        < one-to-many class = "Employee" />

    </ set >         

</ class >

 

职员实体的映射文件( employee ):

< class name = "Employee" table = "ccoa_employee" >

    < id name = "id" column = "id" >

        < generator class = "native" />

     </ id >

    < property name = "name" />

    < property name = "sex" />

    < property name = "employTime" type = "date" />

    < property name = "phone" />

    < property name = "email" />

    < property name = "description" />

       

    <!-- 员工对部门(多对一关系映射) -->

    < many-to-one name = "department" column = "departmentId" />

   

    <!-- 员工对岗位(多对多关系映射) -->

    < set name = "roles" table = "ccoa_employee_roles" >

        < key column = "employeeId" ></ key >

        < many-to-many class = "Role" column = "roleId" />

    </ set >

   

    <!-- 员工对帐户(一对一关系映射) -->

    < one-to-one name = "user" class = "User" />

</ class >

 

岗位实体的映射文件( role ):

< class name = "Role" table = "ccoa_role" >

    < id name = "id" column = "id" >

        < generator class = "native" />

    </ id >

    < property name = "name" />

    < property name = "description" />

    <!-- 岗位与员工(多对多关系映射) -->

    < set name = "employees"   table = "ccoa_employee_roles" >

    < key column = "roleId" />

    < many-to-many class = "Employee" column = "employeeId" />

    </ set >

</ class >

 

用户实体的映射文件( user ):

< class name = "User" table = "ccoa_user" >

    < id name = "id" column = "id" >

        < generator class = "foreign" >

        < param name = "property" > employee </ param >

        </ generator >

    </ id >

    < property name = "loginName" />

    < property name = "password" />

    <!-- 帐户与员工(一对一关系映射) -->

    < one-to-one name = "employee" class = "Employee" constrained = "true" />

</ class >

 

这些映射规则设计的比较合理。但 JDO 已经比它要简单的多了。我们学习一些 hibernate 的关系映射也是十分有必要的。今天晚上汤兄弟给我复习了一下 hibernate 的映射关系,感觉没什么难的。汤兄弟说,如果大家对 hibernate 有了全局的认识。 Hibernate 很简单,就那么点东西。

 

二、实现部分

上边我们完成了设计部分,接下来我们来完成实现部分。汤老师是一位比较有经验的老师,他领着大家做 OA 时,是由框架到实现,一层一层的去实现我们需要的功能。而不是先设计了一个框架,然后具体去实现某一需求。一层一层的懂吗?就像剥洋葱,一层一层的,而不是切洋葱。

 

实现部分我们首先实现 Action ,因为由第一部分我需求我们了解到。每一个管理模块都有增、删、改、查。在我们学习 Servlet 时,我们编写一个 Servlet 对应一个操作请求,那我们得写多少个 Servlet 啊!但我们在学习 Struts1 时,接触到了一个 DispatchAction ,我们可以将某一管理模块的操作请求全部放到一个 DispatchAction 里,所以在这里我们使用了 DispatchAction

 

我们按原计划使用三层以实现,接下来开始编写 Servicen 层。哇赛,你知道多么简单吗?因为我们事先编写了 BeanDaoImpl ,所以在 Service 层中直接调用 BeanDaoImlp 实例的方法即可,此时的 Service 层显得十分没有必要,浪费得很。

 

继续看,我们的 BeanDaoImpl 继承自 BaseDaoImpl 。我们的 BeanDaoImpl 并未写任何方法,使用的全是父类 BaseDaoImpl 的方法。此时 BeanDaoImpl 显得也很浪费,那么我们就将它们“ @Deprecated ”掉。

 

我们直接将 Service Dao 层合并,并且使用 BaseDaoImpl 这一个类的实例就可以了!

 

BaseDaoImpl 内部使用 Hibernate session 实现对数据库的操作。 YEA Hibernate 全帮我们做了。经典!

 

三、显示部分

显示部分我们使用的全是 JSP 页面,表单的检验我们使用的是 JavaScript ,数据显示使用的是 JSTL EL 表达式。就这么简单, OK 了!

 

今天我们只完成了 Role (职员)管理这一部分,其他的管理模块都按照这个模块的流程来。速度非常之快!

 

Java 特性所能发辉的功力, Java 之父早就想到了吗?

转:传智播客—jbpm与OA项目(四)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论