上一節課我們已經完成了 OA 項目的基礎部分,對 DAO 和 BEAN 的基本操作。今日開始學習 OA 項目中“組織管理”這一部分。在學習的過程中,整體上難度相對比較簡單,更多的是項目經驗上的學習。但在配置 hibernate 的映射文件時,大家有些應付不來。我也不例外,一對一映射關系我掌握的不好。但湯兄弟為人正直、善良,他在晚上下課后給我們被了 ??? 。
?
這個項目雖然未詳細涉及企業項目開發中各方面細節,但整個框架是按照這個流程走的。
?
組織機構部分
一、設計部分
1. 了解需求:
我們沒有進行詳細的需求分析,湯兄弟在前天給我發了一個完成的頁面層(靜態頁面)。需求一眼就看穿了。
1) ???????? 部門管理:增、刪、改、查、(子部門)
2) ???????? 崗位管理:增、刪、改、查
3) ???????? 員工管理:增、刪、改、查
?
正如你所看到的,搞應用不就是對數據庫的增、刪、改、查嗎? Java 將應用做的十分好,而且在繼續發展。哦!這些對她來說太簡單了。
?
2. 設計實體
設計實體的兩種方式:
1) ???????? 對象 --> 表:正向工程。(推薦)
2) ???????? 表 --> 對象:反向工程。
?
?
在早之前的開發中,常見的是第二種方式先設計數據表格,然后再編程定接口。但隨著 Java 的日益強大,這一過程被反過來了。面向對象的似乎還有很大的潛力!
?
設計實體時,我們需要考慮用到了哪些(幾個)實體?實體之間的關系是什么?實體具有哪些屬性?我們所說的實體就是 Bean 。湯兄弟使用 StarUML 給大家把所有的實體和實體之間的關系畫了出來,我十分喜歡畫圖,感覺似乎比編碼好多了。我在下面也跟著湯兄弟把圖畫出來了:
?
?
然后 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 之父早就想到了嗎?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
