13.1 项目简介及系统结构

13.1 项目简介及系统结构

人事管理系统是办公信息自动化建设中最常见的项目,几乎每个OA系统中都需要人事管理系统。
该项目包含了用户管理部门管理职位管理员工管理公告管理下载中心等多个模块,页面使用jQuery框架完成动态功能(关于jQuery的知识请参考”疯狂Java系列”之《疯狂前端开发讲义》).
用户管理、部门管理等模块包含了实际项目开发中常用的增删改查动作,下载中心包含了Spring MVC文件上传文件下载等功能。

13.1.1系统功能介绍

  • 用户管理的功能包括:
    • 添加用户,用户可以为管理员或者普通用户;
    • 查询用户,可以查询所有用户或根据用户名和用户状态进行模糊查询;
    • 删除用户;
    • 修改用户.
  • 部门管理的功能包括:
    • 添加部门;
    • 査询部门,可以査询所有部门或根据部门名称进行模糊査询;
    • 删除部门;
    • 修改部门。
  • 职位管理的功能包括:
    • 添加职位;
    • 査询职位,可以査询所有职位或根据职位名称进行模糊査询:
    • 删除职位;
    • 修改职位。
  • 员工管理的功能包括:
    • 添加员工;
    • 查询员工,可以査询所有员工或根据员工姓名、身份证号、手机号、性别、职位、部门进行模糊查询;
    • 删除员工;
    • 修改员工。
  • 公告管理的功能包括:
    • 添加公告;
    • 查询公告,可以查询所有公告或根据公告名称、公告内容进行模糊查询;
    • 删除公告;
    • 修改公告。
  • 下载中心的功能包括:
    • 上传文件;
    • 查询文件,可以查询所有文件或根据文件标题进行模糊査询;预览文件内容;
    • 删除文件;
    • 下载文件。

所有查询页面统一使用分页处理。

13.1.2 相关技术介绍

本系统主要涉及三个开源框架:MyBatis3Spring5和表现层框架jQuery1.11。同时还使用了JSP作为表现层技术。本系统将这4种技术有机地结合在一起,从而构建出一个健壮的Java EE应用。

1.传统表现层技术:JSP

本系统使用JSP作为表现层,负责收集用户请求数据以及业务数据的表示。
JSP是最传统也最有效的表现层技术。本系统的JSP页面是单纯的表现层,所有的JSP页面不再使用Java脚本。结合EL表达式和JSTL标签库,JSP可完成全部的表现层功能,如数据收集、数据展现。

2.MVC框架

本系统使用Spring MVC作为MVC框架。Spring MVC是一个设计优良的MVC框架,大有取代Struts2之势。本应用的所有用户请求,包括系统的超链接和表单提交等,都不再直接发送到表现层JSP页面,而是必须发送给Spring MVCController,Spring MVC控制所有请求的处理和转发。
通过Controller拦截所有请求有个好处:将所有的JSP页面放入WEB-INF/路径下,可以避免用户直接访问JSP页面,从而提高系统的安全性.
本应用使用基于Spring MVC拦截器的权限控制,应用中控制器没有进行权限检査,但每个控制器都需要检査调用者是否有足够的访问权限,这种通用操作正是Spring MVC拦截器的优势所在。

3. Spring框架的作用

Spring框架是系统的核心部分,Spring提供的IoC容器是业务逻辑组件和DAO组件的工,它负责生成并管理这些实例.
借助于Spring的依赖注入,各组件以松耦合的方式组合在一起,组件与组件之间的依赖正是通过Spring的依赖注入管理的。其Service组件和DAO对象都采用面向接口编程的方式,从而降低了系统重构的成本,极好地提高了系统的可维护性、可扩展性。
应用事务采用Spring的声明式事务框架。通过声明式事务,无须将事务策略以硬编码的方式与代码耦合在一起,而是放在配置文件中声明,使业务逻辑组件可以更加专注于业务的实现,从而简化开发。同时,声明式事务降低了不同事务策略的切换代价.

4. My Batis的作用

MyBatisSQL Mapping功能简化了数据库的访问,并在JDBC层提供了更好的封装.
MyBatis可以优雅及灵活的方式操作数据库,由此开发者可以更灵活地编写SQL语句,满足更好的性能需求,为底层DAO对象的实现提供支持。

13.1.3 系统结构

本系统采用严格的Java EE应用结构,主要有如下几个分层:

  • 表现层。由JSP页面组成。
  • MVC层。使用 Spring MVC技术。
  • 业务逻辑层。主要由Spring Ioc容器管理的业务逻辑组件组成。
  • DAO层。由6个DAO组件组成。
  • 领域对象层。由6个Domain Object对象组成.
  • 数据库服务层。使用MySQL数据库存储持久化数据

本应用中的领域对象实际上只是一些简单的Java Bean类,并未提供任何业务逻辑方法,所有的业务逻辑方法都由系统的业务逻辑组件来提供。这种模式简单、直接,系统分层清晰,比较适用于实际项目开发。

13.1.4 系统的功能模块

本系统可以大致分为6个模块:用户管理部门管理职位管理员工管理公告管理文件下载,其主要业务逻辑通过HrmService业务逻辑组件实现,因此可以使用这个业务逻辑组件来封装DAO组件。
提示
通常建议按细粒度的模块来设计Service组件,让业务逻辑组件作为DAO组件的门面,这符合门面模式的设计。同时让DAO组件负责系统持久化逻辑,可以将系统在持久化技术这个维度上的变化独立出去,而业务逻辑组件负责业务逻辑这个维度的改变.
系统以业务逻辑组件作为DAO组件的门面,封装这些DAO组件,业务逻辑组件底层依赖于这些DAO组件,向上实现系统的业务逻辑功能.
本系统主要有如下6个DAO对象:

  • UserDao。提供对user_inf表的基本操作。
  • DeptDao。提供对dept_inf表的基本操作
  • JobDao。提供对job_inf表的基本操作。
  • EmployeeDao。提供对employee_inf表的基本操作。
  • NoticeDao。提供对notice_inf表的基本操作。
  • DocumentDao。提供对document_inf表的基本操作。

本系统还提供一个业务逻辑组件:

  • HrmService。提供所有的业务逻辑功能的实现。

项目结构

展开/折叠
G:\Desktop\随书源码\Spring+Mybatis企业应用实战(第2版)\codes\13\hrmapp
├─src\
│ ├─db.properties
│ ├─log4j.xml
│ └─org\
│   └─fkit\
│     └─hrm\
│       ├─controller\
│       │ ├─DeptController.java
│       │ ├─DocumentController.java
│       │ ├─EmployeeController.java
│       │ ├─FormController.java
│       │ ├─JobController.java
│       │ ├─NoticeController.java
│       │ └─UserController.java
│       ├─dao\
│       │ ├─DeptDao.java
│       │ ├─DocumentDao.java
│       │ ├─EmployeeDao.java
│       │ ├─JobDao.java
│       │ ├─NoticeDao.java
│       │ ├─provider\
│       │ │ ├─DeptDynaSqlProvider.java
│       │ │ ├─DocumentDynaSqlProvider.java
│       │ │ ├─EmployeeDynaSqlProvider.java
│       │ │ ├─JobDynaSqlProvider.java
│       │ │ ├─NoticeDynaSqlProvider.java
│       │ │ └─UserDynaSqlProvider.java
│       │ └─UserDao.java
│       ├─domain\
│       │ ├─Dept.java
│       │ ├─Document.java
│       │ ├─Employee.java
│       │ ├─hrm.mgc
│       │ ├─Job.java
│       │ ├─Notice.java
│       │ └─User.java
│       ├─interceptor\
│       │ └─AuthorizedInterceptor.java
│       ├─service\
│       │ ├─HrmService.java
│       │ └─impl\
│       │   └─HrmServiceImpl.java
│       └─util\
│         ├─common\
│         │ └─HrmConstants.java
│         └─tag\
│           ├─PageModel.java
│           └─PagerTag.java
└─WebContent\
  ├─404.html
  ├─css\
  │ ├─css.css
  │ └─pager.css
  ├─fkjava.ico
  ├─images\
  │ ├─404.jpg
  │ ├─9.png
  │ ├─bt_file.jpg
  │ ├─choose_file.jpg
  │ ├─delete.gif
  │ ├─downLoad.png
  │ ├─left_nav_arrow.gif
  │ ├─left_nav_bg.gif
  │ ├─left_nav_bgshw.gif
  │ ├─left_nav_bottom.gif
  │ ├─left_nav_closed.gif
  │ ├─left_nav_expand.gif
  │ ├─left_nav_top.gif
  │ ├─login_bottom.gif
  │ ├─login_left.gif
  │ ├─login_midbg.gif
  │ ├─login_right.gif
  │ ├─login_top.gif
  │ ├─main_bg.gif
  │ ├─main_locbg.gif
  │ ├─main_locleft.gif
  │ ├─main_locright.gif
  │ ├─none.jpg
  │ ├─pointer.gif
  │ ├─prev.gif
  │ ├─StatBarBg.gif
  │ ├─StatBarL.gif
  │ ├─StatBar_admin.gif
  │ ├─StatBar_time.gif
  │ ├─topbg.gif
  │ ├─top_exit.gif
  │ ├─top_home.gif
  │ ├─top_logo.gif
  │ └─update.gif
  ├─index.jsp
  ├─js\
  │ ├─fkjava_timer.js
  │ ├─jquery-1.11.0.js
  │ ├─jquery-migrate-1.2.1.js
  │ ├─jquery.form.js
  │ ├─ligerUI\
  │ 省略......
  │
  ├─META-INF\
  │ └─MANIFEST.MF
  ├─upload\
  └─WEB-INF\
    ├─applicationContext.xml
    ├─jsp\
    │ ├─dept\
    │ │ ├─dept.jsp
    │ │ ├─showAddDept.jsp
    │ │ └─showUpdateDept.jsp
    │ ├─document\
    │ │ ├─document.jsp
    │ │ ├─showAddDocument.jsp
    │ │ └─showUpdateDocument.jsp
    │ ├─employee\
    │ │ ├─employee.jsp
    │ │ ├─showAddEmployee.jsp
    │ │ └─showUpdateEmployee.jsp
    │ ├─job\
    │ │ ├─job.jsp
    │ │ ├─showAddJob.jsp
    │ │ └─showUpdateJob.jsp
    │ ├─left.jsp
    │ ├─loginForm.jsp
    │ ├─main.jsp
    │ ├─notice\
    │ │ ├─notice.jsp
    │ │ ├─previewNotice.jsp
    │ │ ├─showAddNotice.jsp
    │ │ └─showUpdateNotice.jsp
    │ ├─right.jsp
    │ ├─taglib.jsp
    │ ├─top.jsp
    │ └─user\
    │   ├─showAddUser.jsp
    │   ├─showUpdateUser.jsp
    │   └─user.jsp
    ├─lib\
    │ ├─ant-1.9.6.jar
    │ ├─ant-launcher-1.9.6.jar
    │ ├─asm-5.2.jar
    │ ├─aspectjrt.jar
    │ ├─aspectjtools.jar
    │ ├─aspectjweaver.jar
    │ ├─c3p0-0.9.5.2.jar
    │ ├─cglib-3.2.5.jar
    │ ├─commons-fileupload-1.3.3.jar
    │ ├─commons-io-2.6.jar
    │ ├─commons-logging-1.2.jar
    │ ├─hibernate-c3p0-5.2.10.Final.jar
    │ ├─javassist-3.22.0-CR2.jar
    │ ├─javax.servlet.jsp.jstl-1.2.1.jar
    │ ├─javax.servlet.jsp.jstl-api-1.2.1.jar
    │ ├─log4j-1.2.17.jar
    │ ├─log4j-api-2.3.jar
    │ ├─log4j-core-2.3.jar
    │ ├─mchange-commons-java-0.2.11.jar
    │ ├─mybatis-3.4.5.jar
    │ ├─mybatis-spring-1.3.1.jar
    │ ├─mysql-connector-java-5.1.44-bin.jar
    │ ├─ognl-3.1.15.jar
    │ ├─org.aspectj.matcher.jar
    │ ├─slf4j-api-1.7.25.jar
    │ ├─slf4j-log4j12-1.7.25.jar
    │ ├─spring-aop-5.0.1.RELEASE.jar
    │ ├─spring-aspects-5.0.1.RELEASE.jar
    │ ├─spring-beans-5.0.1.RELEASE.jar
    │ ├─spring-context-5.0.1.RELEASE.jar
    │ ├─spring-context-indexer-5.0.1.RELEASE.jar
    │ ├─spring-context-support-5.0.1.RELEASE.jar
    │ ├─spring-core-5.0.1.RELEASE.jar
    │ ├─spring-expression-5.0.1.RELEASE.jar
    │ ├─spring-instrument-5.0.1.RELEASE.jar
    │ ├─spring-jcl-5.0.1.RELEASE.jar
    │ ├─spring-jdbc-5.0.1.RELEASE.jar
    │ ├─spring-jms-5.0.1.RELEASE.jar
    │ ├─spring-messaging-5.0.1.RELEASE.jar
    │ ├─spring-orm-5.0.1.RELEASE.jar
    │ ├─spring-oxm-5.0.1.RELEASE.jar
    │ ├─spring-test-5.0.1.RELEASE.jar
    │ ├─spring-tx-5.0.1.RELEASE.jar
    │ ├─spring-web-5.0.1.RELEASE.jar
    │ ├─spring-webflux-5.0.1.RELEASE.jar
    │ ├─spring-webmvc-5.0.1.RELEASE.jar
    │ └─spring-websocket-5.0.1.RELEASE.jar
    ├─page.tld
    ├─springmvc-config.xml
    ├─web.xml
    └─xxx.xml