posts - 78, comments - 34, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

上一节课我们已经完成了OA项目的基础部分,对DAOBEAN的基本操作。今日开始学习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”掉。

 

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

 

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

 

三、显示部分

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

 

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

 

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


只有注册用户登录后才能发表评论。


网站导航: