該系統(tǒng)使用了MyBatis + Spring + JQuery + JSP技術(shù)。
采用了嚴(yán)格的JAVAEE應(yīng)用結(jié)構(gòu),具有如下分層:
- 表現(xiàn)層
- MVC層
- 業(yè)務(wù)邏輯層
- DAO層
- 領(lǐng)域?qū)ο髮?/li>
- 數(shù)據(jù)庫(kù)服務(wù)層
??按照之前的理解,業(yè)務(wù)邏輯層主要通過(guò)Controller+Dao文件來(lái)實(shí)現(xiàn),但這里不是。這里業(yè)務(wù)邏輯層主要是由Spring IoC容器管理的業(yè)務(wù)邏輯組件組成,簡(jiǎn)而言之就是將DAO組件封裝成業(yè)務(wù)邏輯組件HrmService(本案例),也就是說(shuō)HrmService封裝了UserDao、DeptDao、JobDao、EmployeeDao、NoticeDao、DocumentDao。還是通過(guò)這些Dao組件來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的各種基本操作。
??這里的Dao文件使用了MyBatis的注解配置方式進(jìn)行實(shí)現(xiàn)。UserDao.java對(duì)應(yīng)的就是UserMapper.java,而UserMapper.java相當(dāng)于不使用注解時(shí)候的UserMapper.xml+UserMapper.java。
??Spring提供的Ioc容器是業(yè)務(wù)邏輯組件和DAO組件的工廠,負(fù)責(zé)生成并管理這些實(shí)例。在《精通Spring 4.x企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)一書(shū)》中介紹到,IoC可以將類(lèi)與類(lèi)之間的依賴從代碼中脫離出來(lái),用配置的方式進(jìn)行依賴關(guān)系描述。
??IoC= Inverse of Control,控制反轉(zhuǎn)。

數(shù)據(jù)表與持久化類(lèi)
??這里的重點(diǎn)在于體會(huì)需要根據(jù)功能設(shè)計(jì)出哪些持久化類(lèi)。
??系統(tǒng)可以分為6個(gè)模塊:用戶管理、部門(mén)管理、職位管理、員工管理、公告管理和文件下載。
??人事管理系統(tǒng),無(wú)非就是要知道公司里面有哪些員工、這些員工屬于哪個(gè)部門(mén)、具體什么職位。本來(lái),員工數(shù)據(jù)表應(yīng)該具有部門(mén)和職位這兩個(gè)欄目,但是部門(mén)和職位又有很多的信息,所以把部門(mén)和職位都單獨(dú)抽離出來(lái)成為一張表。然后通過(guò)外鍵的方式進(jìn)行關(guān)聯(lián)。
??本系統(tǒng)設(shè)計(jì)了六個(gè)持久化類(lèi)。分別為:
User(用戶) 、Dept(部門(mén))、Job(職位)、Employee(員工)、Notice(公告)、Document(文件)。
??User則是需要使用該系統(tǒng)的人。User實(shí)現(xiàn)系統(tǒng)的登錄以后,可以對(duì)互有關(guān)聯(lián)的Employee、Dept、Job類(lèi)進(jìn)行增刪改查,并且還能對(duì)Notice和Document進(jìn)行增刪改查、上傳和下載操作”。
實(shí)現(xiàn)DAO持久層
??DAO中比較生疏的是動(dòng)態(tài)SQL語(yǔ)句,要分析引入SQL語(yǔ)句的原因。注解@SelectProvider。按照目前的理解,動(dòng)態(tài)查詢就是利用一些諸如條件判斷的語(yǔ)句來(lái)根據(jù)不同條件生成不同的SQL語(yǔ)句。
??了解分頁(yè)動(dòng)態(tài)查詢、動(dòng)態(tài)查詢總數(shù)量、動(dòng)態(tài)插入、動(dòng)態(tài)更新這幾個(gè)功能有什么實(shí)際意義。如果不使用動(dòng)態(tài)SQL,就使用傳統(tǒng)的不行嗎。是會(huì)造成效率的下降還是什么情況。
實(shí)現(xiàn)Service持久層
??本系統(tǒng)只使用了一個(gè)業(yè)務(wù)邏輯組件:HrmService。
??HrmService接口中定義了大量的業(yè)務(wù)方法。方法的實(shí)現(xiàn)依賴Dao組件。業(yè)務(wù)邏輯方法的訪問(wèn)涉及多個(gè)DAO操作。而持久層上的變化交給DAO層負(fù)責(zé),業(yè)務(wù)邏輯組件只負(fù)責(zé)業(yè)務(wù)邏輯上的變化。
??主要是創(chuàng)建了HrmService接口。當(dāng)然這些查詢的結(jié)果需要利用到下面的分頁(yè)功能。HrmService實(shí)現(xiàn)了很多方法(具體接口實(shí)現(xiàn)時(shí)分用戶服務(wù)接口、部門(mén)服務(wù)接口、員工服務(wù)接口等等)。
??這里實(shí)現(xiàn)了一個(gè)分頁(yè)的JSP標(biāo)簽,這個(gè)功能有一點(diǎn)陌生。這三個(gè)功能PageModel +PagerTag + page.tld需要好好鞏固下。
實(shí)現(xiàn)Web層
??在springmvc-config.xml中配置了一個(gè)攔截器AuthorizedInterceptor。接下來(lái)就是具體實(shí)現(xiàn)用戶管理、部門(mén)管理、職位管理、員工管理、公告管理、下載中心這幾個(gè)功能。
??這里就會(huì)利用到HrmService接口和該接口中提供的具體的方法。
@Autowired標(biāo)簽是什么意思。
這個(gè)標(biāo)簽是Spring中的IoC容器的知識(shí)。但是具體有什么用處還需要進(jìn)一步了解。通過(guò)@Autowired和@Qualifier就可以自動(dòng)注入U(xiǎn)serService。背后的功能又是如何實(shí)現(xiàn)的,需要進(jìn)行了解。