posts - 78, comments - 34, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          上一節(jié)課我們已經(jīng)完成了OA項(xiàng)目的基礎(chǔ)部分,對(duì)DAOBEAN的基本操作。今日開始學(xué)習(xí)OA項(xiàng)目中“組織管理”這一部分。在學(xué)習(xí)的過程中,整體上難度相對(duì)比較簡單,更多的是項(xiàng)目經(jīng)驗(yàn)上的學(xué)習(xí)。但在配置hibernate的映射文件時(shí),大家有些應(yīng)付不來。我也不例外,一對(duì)一映射關(guān)系我掌握的不好。但湯兄弟為人正直、善良,他在晚上下課后給我們被了   

           

          這個(gè)項(xiàng)目雖然未詳細(xì)涉及企業(yè)項(xiàng)目開發(fā)中各方面細(xì)節(jié),但整個(gè)框架是按照這個(gè)流程走的。

           

          組織機(jī)構(gòu)部分

          一、設(shè)計(jì)部分

          1.了解需求:

          我們沒有進(jìn)行詳細(xì)的需求分析,湯兄弟在前天給我發(fā)了一個(gè)完成的頁面層(靜態(tài)頁面)。需求一眼就看穿了。

          1)         部門管理:增、刪、改、查、(子部門)

          2)         崗位管理:增、刪、改、查

          3)         員工管理:增、刪、改、查

           

          正如你所看到的,搞應(yīng)用不就是對(duì)數(shù)據(jù)庫的增、刪、改、查嗎?Java將應(yīng)用做的十分好,而且在繼續(xù)發(fā)展。哦!這些對(duì)她來說太簡單了。

           

          2.設(shè)計(jì)實(shí)體

          設(shè)計(jì)實(shí)體的兩種方式:

          1)         對(duì)象-->表:正向工程。(推薦)

          2)         -->對(duì)象:反向工程。

           

           

          在早之前的開發(fā)中,常見的是第二種方式先設(shè)計(jì)數(shù)據(jù)表格,然后再編程定接口。但隨著Java的日益強(qiáng)大,這一過程被反過來了。面向?qū)ο蟮乃坪踹€有很大的潛力!

           

          設(shè)計(jì)實(shí)體時(shí),我們需要考慮用到了哪些(幾個(gè))實(shí)體?實(shí)體之間的關(guān)系是什么?實(shí)體具有哪些屬性?我們所說的實(shí)體就是Bean。湯兄弟使用StarUML給大家把所有的實(shí)體和實(shí)體之間的關(guān)系畫了出來,我十分喜歡畫圖,感覺似乎比編碼好多了。我在下面也跟著湯兄弟把圖畫出來了:

           

          clip_image002

           

          然后UML課程在OA項(xiàng)目之后,但看著這圖多專業(yè)~~!!

           

          我們的實(shí)現(xiàn)流程:

          設(shè)計(jì)實(shí)體-->JavaBean-->映射文件-->生成表-->...

           

          設(shè)計(jì)實(shí)體-->JavaBean都比較容易,因?yàn)槲覀兪褂昧?/span>hibernate所以生成表也不需要我們來做了。這個(gè)流程中最為復(fù)雜的是映射文件。因?yàn)?/span>hibernate才講了三天,OA項(xiàng)目中算是第一次應(yīng)用hibernate寫東西。

           

          部門實(shí)體的映射文件(department):

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

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

                  <generator class="native"/>

              </id>

              <property name="name" />

              <!-- 與上級(jí)部門(多對(duì)一) -->

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

              <!-- 與子部門(一對(duì)多) -->       

              <set name="children">

                  <key column="parentId" />

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

              </set>

              <!-- 部門與員工(一對(duì)多關(guān)系映射) -->

              <set name="employees">

                  <key column="departmentId" />

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

              </set>        

          </class>

           

          職員實(shí)體的映射文件(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" />

                 

              <!-- 員工對(duì)部門(多對(duì)一關(guān)系映射) -->

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

             

              <!-- 員工對(duì)崗位(多對(duì)多關(guān)系映射) -->

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

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

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

              </set>

             

              <!-- 員工對(duì)帳戶(一對(duì)一關(guān)系映射) -->

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

          </class>

           

          崗位實(shí)體的映射文件(role):

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

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

                  <generator class="native"/>

              </id>

              <property name="name" />

              <property name="description" />

              <!-- 崗位與員工(多對(duì)多關(guān)系映射) -->

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

              <key column="roleId" />

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

              </set>

          </class>

           

          用戶實(shí)體的映射文件(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" />

              <!-- 帳戶與員工(一對(duì)一關(guān)系映射) -->

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

          </class>

           

          這些映射規(guī)則設(shè)計(jì)的比較合理。但JDO已經(jīng)比它要簡單的多了。我們學(xué)習(xí)一些hibernate的關(guān)系映射也是十分有必要的。今天晚上湯兄弟給我復(fù)習(xí)了一下hibernate的映射關(guān)系,感覺沒什么難的。湯兄弟說,如果大家對(duì)hibernate有了全局的認(rèn)識(shí)。Hibernate很簡單,就那么點(diǎn)東西。

           

          二、實(shí)現(xiàn)部分

          上邊我們完成了設(shè)計(jì)部分,接下來我們來完成實(shí)現(xiàn)部分。湯老師是一位比較有經(jīng)驗(yàn)的老師,他領(lǐng)著大家做OA時(shí),是由框架到實(shí)現(xiàn),一層一層的去實(shí)現(xiàn)我們需要的功能。而不是先設(shè)計(jì)了一個(gè)框架,然后具體去實(shí)現(xiàn)某一需求。一層一層的懂嗎?就像剝洋蔥,一層一層的,而不是切洋蔥。

           

          實(shí)現(xiàn)部分我們首先實(shí)現(xiàn)Action,因?yàn)橛傻谝徊糠治倚枨笪覀兞私獾健C恳粋€(gè)管理模塊都有增、刪、改、查。在我們學(xué)習(xí)Servlet時(shí),我們編寫一個(gè)Servlet對(duì)應(yīng)一個(gè)操作請(qǐng)求,那我們得寫多少個(gè)Servlet啊!但我們在學(xué)習(xí)Struts1時(shí),接觸到了一個(gè)DispatchAction,我們可以將某一管理模塊的操作請(qǐng)求全部放到一個(gè)DispatchAction里,所以在這里我們使用了DispatchAction

           

          我們按原計(jì)劃使用三層以實(shí)現(xiàn),接下來開始編寫Servicen層。哇賽,你知道多么簡單嗎?因?yàn)槲覀兪孪染帉懥?/span>BeanDaoImpl,所以在Service層中直接調(diào)用BeanDaoImlp實(shí)例的方法即可,此時(shí)的Service層顯得十分沒有必要,浪費(fèi)得很。

           

          繼續(xù)看,我們的BeanDaoImpl繼承自BaseDaoImpl。我們的BeanDaoImpl并未寫任何方法,使用的全是父類BaseDaoImpl的方法。此時(shí)BeanDaoImpl顯得也很浪費(fèi),那么我們就將它們“@Deprecated”掉。

           

          我們直接將ServiceDao層合并,并且使用BaseDaoImpl這一個(gè)類的實(shí)例就可以了!

           

          BaseDaoImpl內(nèi)部使用Hibernatesession實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。YEAHibernate全幫我們做了。經(jīng)典!

           

          三、顯示部分

          顯示部分我們使用的全是JSP頁面,表單的檢驗(yàn)我們使用的是JavaScript,數(shù)據(jù)顯示使用的是JSTLEL表達(dá)式。就這么簡單,OK了!

           

          今天我們只完成了Role(職員)管理這一部分,其他的管理模塊都按照這個(gè)模塊的流程來。速度非常之快!

           

          Java特性所能發(fā)輝的功力,Java之父早就想到了嗎?


          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 葵青区| 东阿县| 福安市| 临湘市| 衡东县| 武义县| 岚皋县| 湖州市| 屏山县| 长阳| 响水县| 利津县| 彭州市| 宁夏| 嘉禾县| 威信县| 巴中市| 清远市| 驻马店市| 浏阳市| 黔江区| 义马市| 凌海市| 泸水县| 光山县| 车险| 腾冲县| 龙游县| 民丰县| 绍兴市| 神木县| 岱山县| 潞西市| 阿拉善右旗| 阿瓦提县| 安陆市| 武胜县| 酒泉市| 武邑县| 呼伦贝尔市| 承德县|