一、员工管理系统项目说明:
该项目主要是完成Spring+SpringMVC+mybatis的完整整合,功能实现比较单一,就是一个完成增删改查的小项目!
源代码在githee仓库:SSM实战项目:人事管理系统(蓝色版)
1、整个项目实现功能
管理员的登录,注册,员工的增删改查,批量删除,整个系统设计的目标人群是管理者,系统的主要功能是对员工进行各种信息的操作。主要是完成对数据库的增删改查的功能。
2、开发环境
3、数据库表设计
-- 创建员工表 create table t_emp( id int primary key auto_increment, name varchar(20) not null, salary double not null, age int not null ) -- 添加员工数据 insert into t_emp values(null,'王恒杰',20000,21); insert into t_emp values(null,'杨福君',9000,19); -- 查询员工数据 select * from t_emp; -- 创建管理员表 create table t_admin( id int primary key auto_increment, username varchar(20), password varchar(50) ) -- 添加数据 insert into t_admin values(null,'王恒杰','123456'); -- 查询 select * from t_admin
4、Maven导入项目所依赖的jar包
<!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.2.RELEASE</version> </dependency> <!--springmvc核心依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.2.RELEASE</version> </dependency> <!--servlet-api--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!--jsp--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> </dependency> <!--jstl标签库--> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--mysql驱动jar--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <!--mybatis相关依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!--mybatis和spring的整合jar--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency>
5、Spring+mybatis整合工厂(applicationContext.xml)
<!--1.开启注解扫描--> <context:component-scan base-package="com.tjcu.whj"></context:component-scan> <!--2.加载 jdbc.properties小配置文件--> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <!--3.加载数据源--> <bean class="com.alibaba.druid.pool.DruidDataSource" name="dataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!--4.SqlSessionFactory--> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"> <!--1.依赖于数据源--> <property name="dataSource" ref="dataSource"></property> <!--2:mapper文件--> <property name="mapperLocations" value="classpath:com/tjcu/mapper/*DaoMapper.xml"></property> <!--3.别名--> <property name="typeAliasesPackage" value="com.tjcu.whj.entity"></property> </bean> <!--5.dao--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--sqlSessionFactory--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> <!--依赖于DAO接口类型 --> <property name="basePackage" value="com.tjcu.whj.dao"></property> </bean> <!--6.事务管理器--> <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--7.开启注解式事务控制--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
6、Spring+SpringMVC整合工厂(Spring-mvc.xml)
<!--1.开启注解式扫描--> <context:component-scan base-package="com.tjcu.whj"></context:component-scan> <!--2.注册处理器映射器(解析URL路径)handlerMapping,处理器适配器:参数处理handlerAdapter--> <mvc:annotation-driven/> <!--3.注册视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/"></property> <!--后缀--> <property name="suffix" value=".jsp"></property> </bean> <!--4.处理静态资源拦截问题--> <mvc:default-servlet-handler/>
二、管理员登录/注册模块功能开发
功能模块:登录,注册,注销,密码加密
注册示意图
登录示意图
1、dao层(adminDao.java)
public interface AdminDao { /** * 登录 * @param admin * @return */ public Admin login(Admin admin); /** * 注册 * @param admin */ public void register(Admin admin); }
2、Service层
(1)adminService接口层
public interface AdminService { /** * 登录 * @param admin * @return */ public Admin login(Admin admin); /** * 注册 * @param admin */ public void register(Admin admin); }
(2)adminServiceImpl实现类
@Service("adminService") @Transactional public class AdminServiceImpl implements AdminService { @Autowired private AdminDao adminDao; @Override public Admin login(Admin admin) { return adminDao.login(admin); } @Override public void register(Admin admin) { adminDao.register(admin); } }
3、功能测试(adminTest)
public class AdminTest { @Test public void login(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); AdminService adminService = (AdminService) context.getBean("adminService"); Admin admin = new Admin(null,null, "王恒杰", "123456",true); Admin login = adminService.login(admin); System.out.println(login); } @Test public void register(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); AdminService adminService = (AdminService) context.getBean("adminService"); Admin admin = new Admin(null, "风犬少年","邓正武", "234567",true); adminService.register(admin); } }
4、Controller层
@Controller("adminController") @RequestMapping("admin") public class AdminController { /** * 将adminService到AdminController中 */ @Autowired private AdminService adminService; /** * 登录 * @param admin * @return */ @RequestMapping("login") public String login(Admin admin,HttpServletRequest request){ String password = MD5Utils.md5(admin.getPassword()); admin.setPassword(password); Admin admin1 = adminService.login(admin); System.out.println(admin1); if(admin1!=null){ request.getSession().setAttribute("admin",admin1); return "redirect:/emp/show"; } return "redirect:/login.jsp"; } /** * 注册 * @param admin */ @RequestMapping("register") public String register(Admin admin){ String password = MD5Utils.md5(admin.getPassword()); admin.setPassword(password); adminService.register(admin); return "redirect:/login.jsp"; } /** * 注销登录 * @return */ @RequestMapping("destroy") public String destroy(HttpServletRequest request){ request.getSession().invalidate(); return "redirect:/login.jsp"; } }
三、员工增删改查功能模块的开发
员工的增删改查功能
员工展示页面
添加员工示意图
修改员工示意图
1、dao层(empDao.java)
public interface EmpDao { /** * 添加员工 * * @param emp */ public void insert(Emp emp); /** * 删除员工 * @param id */ public void deleteById(Integer id); /** * 展示员工 * @return */ public List<Emp> showEmp(); /** * 修改员工 * @param emp */ public void updateEmp(Emp emp); /** * 数据回显 * @param id * @return */ public Emp selectEmpById(Integer id); }
2、Service层
(1)empService接口层
public interface EmpService { /** * 添加员工 * * @param emp */ public void insert(Emp emp); /** * 删除员工 * @param id */ public void deleteById(Integer id); /** * 展示员工 * @return */ public List<Emp> showEmp(); /** * 修改员工 * @param emp */ public void updateEmp(Emp emp); /** * 数据回显 * @param id * @return */ public Emp selectEmpById(Integer id); }
(2)empServiceImpl实现类
@Service("empService") /** * 控制事务 */ @Transactional public class EmpServiceImpl implements EmpService { /** * 将empDao注入进@Service组件中 */ @Autowired private EmpDao empDao; public void setEmpDao(EmpDao empDao) { this.empDao = empDao; } @Override public void insert(Emp emp) { empDao.insert(emp); } @Override public void deleteById(Integer id) { empDao.deleteById(id); } @Override @Transactional(propagation = Propagation.SUPPORTS) public List<Emp> showEmp() { return empDao.showEmp(); } @Override public void updateEmp(Emp emp) { empDao.updateEmp(emp); } @Override @Transactional(propagation = Propagation.SUPPORTS) public Emp selectEmpById(Integer id) { return empDao.selectEmpById(id); } }
3、功能测试(EmpTest)
public class EmpTest { /** * 添加员工 */ @Test public void insert(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); EmpService empService = (EmpService) context.getBean("empService"); Emp emp = new Emp(null,"邓正武",2000d,22); empService.insert(emp); } /** * 删除员工 */ @Test public void deleteById(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); EmpService empService = (EmpService) context.getBean("empService"); empService.deleteById(4); } /** * 展示员工 * @return */ @Test public void showEmp(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); EmpService empService = (EmpService) context.getBean("empService"); List<Emp> emps = empService.showEmp(); for (Emp emp : emps) { System.out.println(emp); } } /** * 修改员工 */ @Test public void updateEmp(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); EmpService empService = (EmpService) context.getBean("empService"); Emp emp = new Emp(3,"邓正武",38000d,23); empService.updateEmp(emp); } /** * 数据回显 * @return */ @Test public void selectEmpById(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); EmpService empService = (EmpService) context.getBean("empService"); Emp emp = empService.selectEmpById(1); System.out.println(emp); } }
4、Controller层
@Controller("emoController") @RequestMapping("emp") public class EmpController { /** * 注入empService在EmpController中 */ @Autowired private EmpService empService; /** * 添加员工 * * @param emp */ @RequestMapping("insert") public String insert(Emp emp){ empService.insert(emp); return "redirect:/emp/show"; } /** * 删除员工 * @param emp */ @RequestMapping("delete") public String deleteById(Emp emp){ empService.deleteById(emp.getId()); return "redirect:/emp/show"; } /** * 展示员工 * @return */ @RequestMapping("show") public String showEmp(Model model){ //调用业务方法 List<Emp> emps = empService.showEmp(); //作用域 model.addAttribute("emps",emps); return "emplist"; } /** * 修改员工 * @param emp */ @RequestMapping("update") public String updateEmp(Emp emp){ empService.updateEmp(emp); return "redirect:/emp/show"; } /** * 数据回显 * @param id * @return */ @RequestMapping("select") public String selectEmpById(Integer id,Model model){ Emp emp = empService.selectEmpById(id); model.addAttribute("emp",emp); return "updateEmp"; } }