🍅程序员小王的博客:程序员小王的博客
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
🍅java自学的学习路线:java自学的学习路线
一、员工管理系统项目说明:
该项目主要是完成Spring+SpringMVC+mybatis的完整整合,功能实现比较单一,就是一个完成增删改查的小项目!
源代码在githee仓库:SSM实战项目:人事管理系统(蓝色版)
1、整个项目实现功能
管理员的登录,注册,员工的增删改查,批量删除,整个系统设计的目标人群是管理者,系统的主要功能是对员工进行各种信息的操作。主要是完成对数据库的增删改查的功能。
2、开发环境
分类 | 名称 | 语种 |
---|---|---|
操作系统 | windows10 | 简体中文 |
数据库平台 | MySQL Server 8.0+ | |
应用服务器 | apache-tomcat-8.5.71 | |
java开发工具 | idea | |
框架 | mybatis+Spring+SpringMVC | |
项目名称 | 《学生教务系统》 | |
实现技术 | mybatis+Spring+SpringMVC+mysql+Servlet+jquery+bootStrap+js+Maven+tomcat等技术 |
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";
}
}
源代码在githee仓库:SSM实战项目:人事管理系统(蓝色版)