一、Spring mvc的运行流程
1、客户端通过浏览器发送 HTTP 请求到服务器,请求特定的 URL,这个 URL 对应着 Spring MVC 中的 Controller。
2、所有的请求都会先经过 DispatcherServlet(中央处理器),它是 Spring MVC 的核心控制器,负责统一处理所有的请求。DispatcherServlet 根据请求的 URL 找到对应的 HandlerMapping。
3、HandlerMapping (处理器映射器)将请求的 URL 映射到具体的 Controller 上,确定了处理请求的 Controller 和方法。
4、HandlerAdapter
(处理适配器)是 Spring MVC 框架中的一个关键组件,用于连接 DispatcherServlet
和实际的处理器(Handler),也就是 Controller 中的方法。它的作用是将不同类型的处理器(Handler)适配到 DispatcherServlet
上,使得它们能够处理来自客户端的请求。
5、Controller 是业务逻辑的处理者,它接收到请求后,调用相应的业务逻辑处理方法进行处理。在处理完请求后,Controller 会返回一个 ModelAndView 对象,或者通过 ResponseBody 直接返回数据。
6、ModelAndView 对象包含了视图的名称和模型数据。Controller 处理完请求后,会根据业务逻辑生成模型数据,并将视图的名称和模型数据封装在 ModelAndView 中。
7、ViewResolver(视图解析器) 负责将逻辑视图名称解析为真正的视图对象。它会根据视图的名称,找到对应的视图模板,并返回给 DispatcherServlet。
8、DispatcherServlet 收到视图对象后,调用视图对象的渲染方法进行视图的渲染。视图渲染的结果会生成一个 HTML 页面,或者其他类型的响应数据,如 JSON 或 XML。
9、DispatcherServlet 将渲染好的视图或数据返回给客户端,完成整个请求-响应周期。
二、Spring整合mybatis
1、引入mybatis、spring整合mybatis、mysql、jdbc、德鲁伊的依赖--在pom.xml
<!-- 引入mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis整合spring的依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 德鲁伊连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.14</version>
</dependency>
2、 写配置文件,将sqlsession和mapper交给spring管理,配置数据源--在spring-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:utils="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<!-- 配置数据库连接信息 -->
<utils:properties id="db" location="classpath:db.properties"/>
<!-- 配置数据源:使用德鲁伊 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="#{db.dirver}"/>
<property name="url" value="#{db.url}"/>
<property name="username" value="#{db.user}"/>
<property name="password" value="#{db.password}"/>
</bean>
<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- mybatis配置文件位置 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- mapper对应的映射文件位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- mapper接口配置:让spring接管mapper的实现类 -->
<bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.cykj.mapper"/>
</bean>
</beans>
3、在程序启动的时候读取该配置文件---在web.xml
<!--读取Mybatis整合spring的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
4、写mapper接口,mapper映射文件
--mapper接口
public interface UserMapper {
int delete(@Param("ids") List<Integer> id);
}
--mapper映射文件 mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cykj.mapper.UserMapper">
<delete id="delete">
delete from person where personId in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>
5、在service里写Mapper,调用mapper
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public ResponseDTO delete(List<Integer> id) {
int i = userMapper.delete(id);
if (i > 0){
return ResponseDTO.success("删除成功");
}
return ResponseDTO.falid("删除失败");
}
}
6、controller调用service
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/delete")
@ResponseBody
public ResponseDTO delete(@RequestBody UserVo userVo){
userService.delete(userVo.getIds());
ResponseDTO J = ResponseDTO.success("删除成功");
return J;
}
}
@RestController 是@Controllerhe和ResponseBody --------就是请求动态资源
(注意:若执行后页面返回500有两种情况
- 依赖版本冲突,应修改依赖版本
- 配置文件的一对一对应没有对应上)