2022尚硅谷SSM框架跟学(十)SSM整合
创始人
2024-05-23 04:33:44
0

2022尚硅谷SSM框架跟学 十 SSM整合

  • 四、SSM整合
    • 4.1ContextLoaderListener
      • (1).创建Maven Module
      • (2).导入依赖
      • (3).配置web.xml
      • (4).创建SpringMVC的配置文件并配置
      • (5).创建Spring的配置文件并配置
      • (6).创建组件
      • (7).创建页面
      • (8).访问测试功能
    • 4.2准备工作
      • (1).创建Maven Module
      • (2).导入依赖
      • (3).创建表
    • 4.3配置web.xml
    • 4.4创建SpringMVC的配置文件并配置
    • 4.5创建Spring的配置文件并配置
    • 4.6测试功能
      • (1).创建组件
      • (2).创建页面
      • (3).访问测试分页功能
    • 4.7搭建MyBatis环境
      • (1).创建属性文件jdbc.properties
      • (2).创建MyBatis的核心配置文件mybatis-config.xml
      • (3).创建Mapper接口和映射文件
      • (4).创建日志文件log4j.xml
    • 4.8测试整合Spring整合MyBatis
    • 4.8测试整合配置事务
    • 4.9测试实现功能
      • (1).查询所有员工信息
      • (2).分页
      • (3).添加
      • (4).修改
      • (5).删除
    • 5.项目结构
      • 5.1项目界面
        • 首页
        • 员工列表
        • 添加员工
        • 修改员工
      • 5.2项目结构
      • 5.2配置文件
        • jdbc.properties
        • log4j.xml
        • mybatis-config.xml
        • spring.xml
        • springmvc.xml
      • 5.3前台界面
        • index.html首页
        • employee_add.html添加员工
        • employee_list.html员工列表(无分页)
        • employee_list_page.html员工列表分页
        • employee_update.html员工信息修改
        • error.html错误页面
      • 5.4后台界面
        • EmployeeController.java
        • ExceptionController.java
        • FirstInterceptor.java
        • EmployeeMapper.java
        • Employee.java
        • EmployeeServiceImpl.java
        • EmployeeService.java

四、SSM整合

分析一下,要想整合,那就要满足Spring中的IOC容器先加载Service,之后Spring MVC中的IOC容器加载Controller。这是因为加载Controller的前提是要获取Service中的Bean的自动装配。而Spring MVC中的IOC容器的初始化是在DispatcherServlet中,所以Service的加载必须在这之前。
各个组件初始化执行顺序:

监听器→过滤器→Servlet

所以自然想到,把获取Spring的IOC容器的方法放到监听器初始化中。

4.1ContextLoaderListener

Spring提供了监听器ContextLoaderListener,实现ServletContextListener接口,可监听ServletContext的状态,在web服务器的启动,读取Spring的配置文件,创建Spring的IOC容器。

监听器常见的类型:

ServletContextListener:监听ServletContext的状态
HttpSessionListener:监听HttpSession的状态
HttpSessionAttributeListener:监听HttpSession的状

而看源码,ContextLoaderListener就是接口ServletContextListener的实现类。

public class ContextLoaderListener extends ContextLoader implements ServletContextListener {}

在这里插入图片描述
之后我们看initWebApplicationContext方法
在这里插入图片描述
往下拉继续看
在这里插入图片描述

web应用中必须在web.xml中来配置监听器。

org.springframework.web.context.ContextLoaderListenercontextConfigLocationclasspath:spring.xml

那我们先来看下监听器的应用

(1).创建Maven Module

Name:spring-integration-listener
GroupId:com.atguigu

pom.xml配置打包形式

war

(2).导入依赖

pom.xml剩下的依赖和之前的文件一样

org.springframeworkspring-webmvc5.3.1ch.qos.logbacklogback-classic1.2.3javax.servletjavax.servlet-api3.1.0providedorg.thymeleafthymeleaf-spring53.0.12.RELEASE

(3).配置web.xml

修改web.xml的路径

F:\javawebwork\SSM\spring-integration-listener\src\main\webapp\WEB-INF\web.xml

在这里插入图片描述
配置web.xml


CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrueCharacterEncodingFilter/*HiddenHttpMethodFilterorg.springframework.web.filter.HiddenHttpMethodFilterHiddenHttpMethodFilter/*DispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc.xml1DispatcherServlet/contextConfigLocationclasspath:spring.xmlorg.springframework.web.context.ContextLoaderListener

(4).创建SpringMVC的配置文件并配置

springmvc.xml拷贝之前的项目配置即可



(5).创建Spring的配置文件并配置

创建spring.xml
配置扫描业务层组件,先自动装配Spring中的Service组件




(6).创建组件

创建控制层组件创建com.atguigu.controller.HelloController

package com.atguigu.controller;import com.atguigu.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;/*** @ClassName: HelloController* @Description:* @Author: wty* @Date: 2023/2/3*/
@Controller
public class HelloController {@Autowiredprivate HelloService helloService;
}

创建接口com.atguigu.service.HelloService

package com.atguigu.service;/*** @InterfaceName: HelloService* @Description:* @Author: wty* @Date: 2023/2/3*/public interface HelloService {
}

创建实现类HelloServiceImpl.java

package com.atguigu.service.impl;import com.atguigu.service.HelloService;/*** @ClassName: HelloServiceImpl* @Description:* @Author: wty* @Date: 2023/2/3*/
@Service
public class HelloServiceImpl implements HelloService {
}

(7).创建页面

创建首页index.html



首页


index.html

(8).访问测试功能

重新配置Tomcat
在这里插入图片描述
在这里插入图片描述
启动Tomcat,首页加载成功
在这里插入图片描述
这里如果我们把监听器的那段配置注释会怎么样呢?
注释掉web.xml的代码
在这里插入图片描述
这里注意2个配置文件的自动装配的范围不一样
在这里插入图片描述

重新启动Tomcat,直接报错,没有任何一个匹配的bean完成自动装配
在这里插入图片描述
这里我们不禁会问,为啥spring的ioc容器初始化和spring mvc的ioc容器初始化可以整合呢,我们看一下源代码。
FrameworkServlet.class
在这里插入图片描述

4.2准备工作

(1).创建Maven Module

新建Module

Name:ssm
GroupId:com.atguigu.ssm

(2).导入依赖

pom.xml中设置打包方式

 war

pom.xml中继续配置


SSMorg.example1.0-SNAPSHOT4.0.0warcom.atguigu.ssmssm885.3.1org.springframeworkspring-context${spring.version}org.springframeworkspring-beans${spring.version}org.springframeworkspring-web${spring.version}org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-jdbc${spring.version}org.springframeworkspring-aspects${spring.version}org.springframeworkspring-test${spring.version}org.mybatismybatis3.5.7org.mybatismybatis-spring2.0.6com.alibabadruid1.0.9junitjunit4.12testmysqlmysql-connector-java5.1.20log4jlog4j1.2.17com.github.pagehelperpagehelper5.2.0ch.qos.logbacklogback-classic1.2.3javax.servletjavax.servlet-api3.1.0providedcom.fasterxml.jackson.corejackson-databind2.12.1commons-fileuploadcommons-fileupload1.3.1org.thymeleafthymeleaf-spring53.0.12.RELEASE

(3).创建表

在这里插入图片描述
建表语句如下:

CREATE TABLE `t_emp` (`emp_id` INT(11) NOT NULL AUTO_INCREMENT,`emp_name` VARCHAR(20) DEFAULT NULL,`age` INT(11) DEFAULT NULL,`gender` CHAR(1) DEFAULT NULL,`email` VARCHAR(50) DEFAULT NULL,PRIMARY KEY (`emp_id`)
) ENGINE=INNODB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8

4.3配置web.xml

配置web.xml
正确路径如下:

F:\javawebwork\SSM\ssm\src\main\webapp\WEB-INF\web.xml

在这里插入图片描述
web.xml文件配置如下


CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrueCharacterEncodingFilter/*HiddenHttpMethodFilterorg.springframework.web.filter.HiddenHttpMethodFilterHiddenHttpMethodFilter/*SpringMVCorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc.xml1SpringMVC/org.springframework.web.context.ContextLoaderListenercontextConfigLocationclasspath:spring.xml

4.4创建SpringMVC的配置文件并配置

创建springmvc.xml


error

4.5创建Spring的配置文件并配置

在这里插入代码片

4.6测试功能

(1).创建组件

实体类Employee
com.atguigu.pojo.Employee

package com.atguigu.pojo;/*** @ClassName: Employee* @Description:* @Author: wty* @Date: 2023/2/3*/public class Employee {private Integer empId;private String empName;private Integer age;private String gender;private String email;public Employee() {}public Employee(Integer empId, String empName, Integer age, String gender, String email) {this.empId = empId;this.empName = empName;this.age = age;this.gender = gender;this.email = email;}public Integer getEmpId() {return empId;}public void setEmpId(Integer empId) {this.empId = empId;}public String getEmpName() {return empName;}public void setEmpName(String empName) {this.empName = empName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "Employee{" +"empId=" + empId +", empName='" + empName + '\'' +", age=" + age +", gender='" + gender + '\'' +", email='" + email + '\'' +'}';}
}

创建控制层组件EmployeeController
com.atguigu.controller.EmployeeController

@Controller
public class EmployeeController {
}

创建接口EmployeeService

public interface EmployeeService {
}

创建实现类EmployeeServiceImpl

@Service
public class EmployeeServiceImpl implements EmployeeService {
}

创建ExceptionController.java

// 将当前类标识为异常处理的组件
@ControllerAdvice
public class ExceptionController {// 设置要处理的异常信息@ExceptionHandler(ArithmeticException.class)// ex表示控制器方法出现的异常public ModelAndView handleException(Throwable ex) {ModelAndView mav = new ModelAndView();//向请求域共享数据mav.addObject("ex", ex);//设置视图,实现页面跳转mav.setViewName("error");return mav;}
}

(2).创建页面

创建首页index.html



首页


index.html

创建错误页面error.html



错误


error.html

(3).访问测试分页功能

部署Tomcat
在这里插入图片描述
配置重启设置
在这里插入图片描述
启动Tomcat看一下
在这里插入图片描述

4.7搭建MyBatis环境

(1).创建属性文件jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=hsp

(2).创建MyBatis的核心配置文件mybatis-config.xml

用模板创建即可
在这里插入图片描述

(3).创建Mapper接口和映射文件

com.atguigu.mapper.EmployeeMapper

在这里插入代码片

创建映射文件ssm/src/main/resources/com/atguigu/mapper/EmployeeMapper.xml




(4).创建日志文件log4j.xml

在这里插入图片描述




4.8测试整合Spring整合MyBatis

修改spring.xml
增加代码

    

看一下SqlSessionFactoryBean的源码

public class SqlSessionFactoryBean implements FactoryBean, InitializingBean, ApplicationListener {}

其父类是

public interface FactoryBean {}

在这里插入图片描述
修改EmployeeServiceImpl.java
这里可以看到,可以从业务层直接调用SqlSessionFactory进行装配,当然这里了解一下即可,我们最终的实现方案比这个简单。

@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate SqlSessionFactory sqlSessionFactory;
}

删除这段代码即可
在这里插入图片描述
继续修改spring.xml,加上数据源的引用

    

mybatis-config.xml中关于数据源的配置就可以删除了





继续配置spring.xml
配置类型别名的包

        

那么mybatis-config.xml对别名的配置可以删除了
在这里插入图片描述
修改spring.xml
这个设置时,映射文件对应的包和mapper接口对应的包不一致的时候才配置。
在这里插入图片描述
配置如下:


删除mybatis-config.xml的配置
在这里插入图片描述
当然这里只是演示一下不一样的情况,spring.xml还是注释掉
在这里插入图片描述
在mybatis-config.xml中配置分页插件

 

当然在spring.xml也可以配置(这里看一下如何配置即可,注释掉)

    

注释掉
在这里插入图片描述
现在mybatis-config.xml只剩下





继续配置spring.xml
把bean配置的所有Mapper接口,通过SqlSessionFactory创建的sqlSession创建代理实现类对象,并将这些对象交给IOC容器管理。

    

4.8测试整合配置事务

在spring.xml中配置

    

开启事务注解驱动,要注意选择tx结尾的。
在这里插入图片描述
在这里插入图片描述
修改EmployeeServiceImpl.java

@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {
}

拷贝static
在这里插入图片描述

4.9测试实现功能

(1).查询所有员工信息

修改com.atguigu.controller

@Controller
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@RequestMapping(value = "/employee", method = RequestMethod.GET)public String getAllEmployee(ModelMap map) {// 查询所有的员工信息List list = employeeService.getAllEmployee();// 在请求域中共享map.addAttribute("list", list);// 跳转界面return "employee_list";}
}

修改EmployeeService.java

public interface EmployeeService {/*** @param* @return java.util.List* @description //查询所有员工信息* @date 2023/2/3 13:32* @author wty**/List getAllEmployee();
}

修改EmployeeServiceImpl.java

@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Overridepublic List getAllEmployee() {return employeeMapper.getAllEmployee();}
}

修改EmployeeMapper.java

public interface EmployeeMapper {/*** @param* @return java.util.List* @description //查询所有员工* @date 2023/2/3 13:35* @author wty**/List getAllEmployee();
}

修改EmployeeMapper.xml





创建employee_list.html



员工列表


员工列表
流水号员工姓名年龄性别邮箱操作
修改删除

看一下target中没有加载static
在这里插入图片描述
执行后点击package
在这里插入图片描述
修改index.html



首页


index.html

查询员工信息

之后部署Tomcat
在这里插入图片描述
点击查询员工信息
在这里插入图片描述

(2).分页

修改主页index.html,增加分页的入口

查询员工信息(分页)

修改EmployeeController.java

    @RequestMapping(value = "/employee/page/{pageNum}", method = RequestMethod.GET)public String getEmployeePage(Map map, @PathVariable("pageNum") Integer pageNum) {// 获取员工的分页信息PageInfo pageInfo = employeeService.getEmployeePage(pageNum);// 在请求域中共享map.put("pageInfo", pageInfo);// 跳转界面return "employee_list_page";}

修改EmployeeService.java

 /*** @param* @return com.github.pagehelper.PageInfo* @description //查询所有员工信息(分页)* @param: pageNum* @date 2023/2/3 14:21* @author wty**/PageInfo getEmployeePage(Integer pageNum);

修改EmployeeServiceImpl.java

 @Overridepublic PageInfo getEmployeePage(Integer pageNum) {// 开启分页功能,2个参数是当前页页码pageNum以及每页的条数6Page page = PageHelper.startPage(pageNum, 6);// 查询所有的员工信息List list = employeeMapper.getAllEmployee();// list后开启分页功能,另一个参数比如设置5,导航分页是2,3,4,5,6PageInfo pageInfo = new PageInfo<>(list, 5);return pageInfo;}
 

修改employee_list_page.html



员工列表(分页)


员工列表(分页)
流水号员工姓名年龄性别邮箱操作
修改删除

重新部署Tomcat
在这里插入图片描述
点击超链接后跳转
在这里插入图片描述
更改地址,可以实现页面的跳转

http://localhost:8080/ssm/employee/page/2

这种方式明显是不可取的,我们不能让用户手动输入。
那我们需要修改employee_list_page.html



员工列表(分页)


员工列表(分页)
流水号员工姓名年龄性别邮箱操作
修改删除

重新部署Tomcat,看第二页即可
在这里插入图片描述
设置导航分页employee_list_page.html

    

重新部署
在这里插入图片描述
为当前选定页改变样式,修改employee_list_page.html

    

重新部署Tomcat
在这里插入图片描述
后续完善添加和删除还有修改功能

(3).添加

员工列表中添加超链接跳转
employee_list_page.html

操作(+)

修改springmvc.xml增加跳转添加的页面


新增添加员工的页面employee_add.html



添加员工


添加员工
员工姓名:
年龄:
性别:
邮箱:

修改EmployeeController.java
添加方法

    @RequestMapping(value = "/employee", method = RequestMethod.POST)public String insertEmployee(Employee employee) {// 保存员工的信息employeeService.insertEmployee(employee);return "redirect:/employee/page/1";}

修改EmployeeService.java,增加方法

    /*** @param* @return int* @description //添加员工信息* @param: employee* @date 2023/2/3 16:02* @author wty**/int insertEmployee(Employee employee);

修改EmployeeServiceImpl.java增加方法

    @Overridepublic int insertEmployee(Employee employee) {return employeeMapper.insertEmployee(employee);}

修改EmployeeMapper.java,增加方法

  /*** @param* @return int* @description //保存员工信息* @param: employee* @date 2023/2/3 16:01* @author wty**/int insertEmployee(Employee employee);

修改EmployeeMapper.xml

    insert into t_empvalues (null, #{empName}, #{age}, #{gender}, #{email})

最后部署Tomcat
在这里插入图片描述
单击+的超链接跳转
在这里插入图片描述

跳转后输入信息
在这里插入图片描述
最后点击添加,跳转后,发现添加成功
在这里插入图片描述

(4).修改

修改employee_list_page.html
修改增加超链接

修改

修改EmployeeController.java增加跳转页面

@RequestMapping(value = "/employee/{empId}", method = RequestMethod.GET)public String toUpdateEmployee(ModelMap map, @PathVariable("empId") Integer empId) {// 获取员工的分页信息Employee employee = employeeService.getEmployeeByEmpId(empId);// 在请求域中共享map.put("employeeUpdate", employee);// 跳转界面return "employee_update";}

新增界面employee_update.html



添加员工


添加员工
员工姓名:
年龄:
性别:
邮箱:

修改EmployeeController.java增加修改提交

 @RequestMapping(value = "/employee", method = RequestMethod.PUT)public String updateEmployee(Employee employee) {// 修改员工信息employeeService.updateEmployee(employee);// 跳转界面return "redirect:/employee/page/1";}

部署Tomcat
在这里插入图片描述
点击之后跳转
在这里插入图片描述
修改之后
在这里插入图片描述

(5).删除

修改employee_list_page.html
增加删除的超链接

删除

增加form表单
employee_list_page.html

引入vue



修改EmployeeController.java

 @RequestMapping(value = "/employee/{empId}", method = RequestMethod.DELETE)public String deleteEmployee(@PathVariable("empId") Integer empId) {// 修改员工信息employeeService.deleteEmployeeByEmpId(empId);// 跳转界面return "redirect:/employee/page/1";}

修改EmployeeService.java

 /*** @param* @return int* @description //根据员工ID删除员工信息* @param: empId* @date 2023/2/3 17:32* @author wty**/int deleteEmployeeByEmpId(Integer empId);

修改EmployeeServiceImpl.java

@Overridepublic int deleteEmployeeByEmpId(Integer empId) {return employeeMapper.deleteEmployeeByEmpId(empId);}

修改EmployeeMapper.java

    /*** @param* @return int* @description //根据员工ID删除员工信息* @param: empId* @date 2023/2/3 17:33* @author wty**/int deleteEmployeeByEmpId(Integer empId);

修改EmployeeMapper.xml

    deletefrom t_empwhere emp_id = #{empId}

重新部署Tomcat
在这里插入图片描述
点击删除后,弹出对话框
在这里插入图片描述
点击确定后,删除
在这里插入图片描述

5.项目结构

5.1项目界面

首页

在这里插入图片描述

员工列表

在这里插入图片描述

添加员工

在这里插入图片描述

修改员工

在这里插入图片描述

5.2项目结构

至此所有功能写完,这里附上项目结构
在这里插入图片描述
前台界面如下
在这里插入图片描述

5.2配置文件

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=hsp

log4j.xml




mybatis-config.xml





spring.xml




springmvc.xml


error

5.3前台界面

index.html首页



首页


index.html

查询员工信息
查询员工信息(分页)

employee_add.html添加员工



添加员工



添加员工
员工姓名:
年龄:
性别:
邮箱:

employee_list.html员工列表(无分页)



员工列表


员工列表
流水号员工姓名年龄性别邮箱操作
修改删除

employee_list_page.html员工列表分页



员工列表(分页)



员工列表(分页)
流水号员工姓名年龄性别邮箱操作(+)
修改删除

employee_update.html员工信息修改



修改员工信息


修改员工信息
员工姓名:
年龄:
性别:
邮箱:

error.html错误页面



错误


error.html

5.4后台界面

EmployeeController.java

package com.atguigu.controller;import com.atguigu.pojo.Employee;
import com.atguigu.service.EmployeeService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import java.util.List;
import java.util.Map;/*** @ClassName: EmployeeController* @Description: 查询所有员工的信息-->/employee-->GET* 更改成分页后:查询所有员工的信息-->/employee/page/1-->GET* 根据id查询某个员工的信息-->/employee/id-->GET* 跳转到添加界面-->/to/add-->GET* 添加员工信息-->/employee-->POST* 修改员工的信息-->/employee-->PUT* 删除员工的信息-->/employee/1-->DELETE* @Author: wty* @Date: 2023/2/3*/
@Controller
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@RequestMapping(value = "/employee", method = RequestMethod.GET)public String getAllEmployee(ModelMap map) {// 查询所有的员工信息List list = employeeService.getAllEmployee();// 在请求域中共享map.addAttribute("list", list);// 跳转界面return "employee_list";}@RequestMapping(value = "/employee/page/{pageNum}", method = RequestMethod.GET)public String getEmployeePage(Map map, @PathVariable("pageNum") Integer pageNum) {// 获取员工的分页信息PageInfo pageInfo = employeeService.getEmployeePage(pageNum);// 在请求域中共享map.put("pageInfo", pageInfo);// 跳转界面return "employee_list_page";}@RequestMapping(value = "/employee", method = RequestMethod.POST)public String insertEmployee(Employee employee) {// 保存员工的信息employeeService.insertEmployee(employee);return "redirect:/employee/page/1";}@RequestMapping(value = "/employee/{empId}", method = RequestMethod.GET)public String toUpdateEmployee(ModelMap map, @PathVariable("empId") Integer empId) {// 获取员工的分页信息Employee employee = employeeService.getEmployeeByEmpId(empId);// 在请求域中共享map.put("employeeUpdate", employee);// 跳转界面return "employee_update";}@RequestMapping(value = "/employee", method = RequestMethod.PUT)public String updateEmployee(Employee employee) {// 修改员工信息employeeService.updateEmployee(employee);// 跳转界面return "redirect:/employee/page/1";}@RequestMapping(value = "/employee/{empId}", method = RequestMethod.DELETE)public String deleteEmployee(@PathVariable("empId") Integer empId) {// 修改员工信息employeeService.deleteEmployeeByEmpId(empId);// 跳转界面return "redirect:/employee/page/1";}
}

ExceptionController.java

package com.atguigu.controller;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;/*** @ClassName: ExceptionController* @Description:* @Author: wty* @Date: 2023/2/3*/
// 将当前类标识为异常处理的组件
@ControllerAdvice
public class ExceptionController {// 设置要处理的异常信息@ExceptionHandler(ArithmeticException.class)// ex表示控制器方法出现的异常public ModelAndView handleException(Throwable ex) {ModelAndView mav = new ModelAndView();//向请求域共享数据mav.addObject("ex", ex);//设置视图,实现页面跳转mav.setViewName("error");return mav;}
}

FirstInterceptor.java

package com.atguigu.interceptor;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @ClassName: FirstInterceptor* @Description:* @Author: wty* @Date: 2023/2/3*/
@Component
public class FirstInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("FirstInterceptor.preHandle");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("FirstInterceptor.postHandle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("FirstInterceptor.afterCompletion");}
}

EmployeeMapper.java

package com.atguigu.mapper;import com.atguigu.pojo.Employee;
import com.github.pagehelper.PageInfo;import java.util.List;/*** @InterfaceName: EmployeeMapper* @Description:* @Author: wty* @Date: 2023/2/3*/public interface EmployeeMapper {/*** @param* @return java.util.List* @description //查询所有员工* @date 2023/2/3 13:35* @author wty**/List getAllEmployee();/*** @param* @return int* @description //保存员工信息* @param: employee* @date 2023/2/3 16:01* @author wty**/int insertEmployee(Employee employee);/*** @param* @return com.atguigu.pojo.Employee* @description //根据EmpId获取员工信息* @param: empId* @date 2023/2/3 16:38* @author wty**/Employee getEmployeeByEmpId(Integer empId);/*** @param* @return int* @description //更新员工信息* @param: employee* @date 2023/2/3 17:01* @author wty**/int updateEmployee(Employee employee);/*** @param* @return int* @description //根据员工ID删除员工信息* @param: empId* @date 2023/2/3 17:33* @author wty**/int deleteEmployeeByEmpId(Integer empId);
}

Employee.java

package com.atguigu.pojo;/*** @ClassName: Employee* @Description:* @Author: wty* @Date: 2023/2/3*/public class Employee {private Integer empId;private String empName;private Integer age;// 1:男,0女private String gender;private String email;public Employee() {}public Employee(Integer empId, String empName, Integer age, String gender, String email) {this.empId = empId;this.empName = empName;this.age = age;this.gender = gender;this.email = email;}public Integer getEmpId() {return empId;}public void setEmpId(Integer empId) {this.empId = empId;}public String getEmpName() {return empName;}public void setEmpName(String empName) {this.empName = empName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "Employee{" +"empId=" + empId +", empName='" + empName + '\'' +", age=" + age +", gender='" + gender + '\'' +", email='" + email + '\'' +'}';}
}

EmployeeServiceImpl.java

package com.atguigu.service.impl;import com.atguigu.mapper.EmployeeMapper;
import com.atguigu.pojo.Employee;
import com.atguigu.service.EmployeeService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;/*** @ClassName: EmployeeImpl* @Description:* @Author: wty* @Date: 2023/2/3*/
@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Overridepublic List getAllEmployee() {return employeeMapper.getAllEmployee();}@Overridepublic PageInfo getEmployeePage(Integer pageNum) {// 开启分页功能,2个参数是当前页页码pageNum以及每页的条数6Page page = PageHelper.startPage(pageNum, 6);// 查询所有的员工信息List list = employeeMapper.getAllEmployee();// list后开启分页功能,另一个参数比如设置5,导航分页是2,3,4,5,6PageInfo pageInfo = new PageInfo<>(list, 5);return pageInfo;}@Overridepublic int insertEmployee(Employee employee) {return employeeMapper.insertEmployee(employee);}@Overridepublic Employee getEmployeeByEmpId(Integer empId) {return employeeMapper.getEmployeeByEmpId(empId);}@Overridepublic int updateEmployee(Employee employee) {return employeeMapper.updateEmployee(employee);}@Overridepublic int deleteEmployeeByEmpId(Integer empId) {return employeeMapper.deleteEmployeeByEmpId(empId);}} 

EmployeeService.java

package com.atguigu.service;import com.atguigu.pojo.Employee;
import com.github.pagehelper.PageInfo;import java.util.List;/*** @InterfaceName: EmployeeService* @Description:* @Author: wty* @Date: 2023/2/3*/public interface EmployeeService {/*** @param* @return java.util.List* @description //查询所有员工信息* @date 2023/2/3 13:32* @author wty**/List getAllEmployee();/*** @param* @return com.github.pagehelper.PageInfo* @description //查询所有员工信息(分页)* @param: pageNum* @date 2023/2/3 14:21* @author wty**/PageInfo getEmployeePage(Integer pageNum);/*** @param* @return int* @description //添加员工信息* @param: employee* @date 2023/2/3 16:02* @author wty**/int insertEmployee(Employee employee);/*** @param* @return com.atguigu.pojo.Employee* @description //根据EmpId获取员工信息* @param: empId* @date 2023/2/3 16:37* @author wty**/Employee getEmployeeByEmpId(Integer empId);/*** @param* @return int* @description //更新员工信息* @param: employee* @date 2023/2/3 17:00* @author wty**/int updateEmployee(Employee employee);/*** @param* @return int* @description //根据员工ID删除员工信息* @param: empId* @date 2023/2/3 17:32* @author wty**/int deleteEmployeeByEmpId(Integer empId);}

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...