13.1 项目简介及系统结构
13.1 项目简介及系统结构
人事管理系统是办公信息自动化
建设中最常见的项目,几乎每个OA
系统中都需要人事管理系统。
该项目包含了用户管理
、部门管理
、职位管理
、员工管理
、公告管理
、下载中心
等多个模块,页面使用jQuery
框架完成动态功能(关于jQuery
的知识请参考”疯狂Java
系列”之《疯狂前端开发讲义》)。
用户管理、部门管理等模块包含了实际项目开发中常用的增删改查
动作,下载中心包含了Spring MVC
的文件上传
、文件下载
等功能。
13.1.1系统功能介绍
- 用户管理的功能包括:
- 添加用户,用户可以为管理员或者普通用户;
- 查询用户,可以查询所有用户或根据用户名和用户状态进行模糊查询;
- 删除用户;
- 修改用户。
- 部门管理的功能包括:
- 添加部门;
- 査询部门,可以査询所有部门或根据部门名称进行模糊査询;
- 删除部门;
- 修改部门。
- 职位管理的功能包括:
- 添加职位;
- 査询职位,可以査询所有职位或根据职位名称进行模糊査询:
- 删除职位;
- 修改职位。
- 员工管理的功能包括:
- 添加员工;
- 查询员工,可以査询所有员工或根据员工姓名、身份证号、手机号、性别、职位、部门进行模糊查询;
- 删除员工;
- 修改员工。
- 公告管理的功能包括:
- 添加公告;
- 查询公告,可以查询所有公告或根据公告名称、公告内容进行模糊查询;
- 删除公告;
- 修改公告。
- 下载中心的功能包括:
- 上传文件;
- 查询文件,可以查询所有文件或根据文件标题进行模糊査询;预览文件内容;
- 删除文件;
- 下载文件。
所有查询页面统一使用分页处理。
13.1.2 相关技术介绍
本系统主要涉及三个开源框架:MyBatis3
、Spring5
和表现层框架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 MVC
的Controller
,Spring MVC
控制所有请求的处理和转发。
通过Controller
拦截所有请求有个好处:将所有的JSP
页面放入WEB-INF/
路径下,可以避免用户直接访问JSP
页面,从而提高系统的安全性。
本应用使用基于Spring MVC
拦截器的权限控制,应用中控制器没有进行权限检査,但每个控制器都需要检査调用者是否有足够的访问权限,这种通用操作正是Spring MVC
拦截器的优势所在。
3. Spring框架的作用
Spring
框架是系统的核心部分,Spring
提供的IoC
容器是业务逻辑组件和DAO
组件的工厂,它负责生成并管理这些实例。
借助于Spring
的依赖注入,各组件以松耦合的方式组合在一起,组件与组件之间的依赖正是通过Spring
的依赖注入管理的。其Service
组件和DAO
对象都采用面向接口编程的方式,从而降低了系统重构的成本,极好地提高了系统的可维护性、可扩展性。
应用事务采用Spring
的声明式事务框架。通过声明式事务,无须将事务策略以硬编码的方式与代码耦合在一起,而是放在配置文件中声明,使业务逻辑组件可以更加专注于业务的实现,从而简化开发。同时,声明式事务降低了不同事务策略的切换代价。
4. MyBatis的作用
MyBatis
的SQL 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