ssm整合
①使用idea创建maven项目如图:
MyBatis缓存机制
MyBatis联合查询
搭建MyBatis
SpringMVC异常处理
1、局部异常处理
在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 而SpringMVC提供了强大的异常处理机制,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。新建一个SpringMVC项目,基础示例代码为https://perfectcode.top/2020/12/20/SpringMVC%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B/。
①新建一个ExceptionController,编写一个异常请求以及一个异常方法,并在异常方法上标注@ExceptionHandler注解,即告诉SpringMVC此方法专门用来处理ExceptionController类发生的异常。
拦截器
1、拦截器简介
Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
mvc:annotation-driven标签
1、mvc:annotation-driven简介
SpringMVC为我们提供的一个标签 <mvc:annotation-driven/>,这个标签会帮我们注入很多关键而实用的bean(主要注册HandlerMappings-路径匹配器、HandlerAdapters-路径匹配适配器、HandlerExceptionResolvers-异常解析器、AntPathMatcher-路径解析器、UrlPathHelper-请求路径获取帮助类等beans,提前为mvc做好基础的准备),并提供以下支持:
- 支持使用 ConversionService 实例对表单参数进行类型转换。
- 支持使用 @NumberFormat annotation、@DateTimeFormat注解完成数据类型的格式化。
- 支持使用 @Valid注解对 JavaBean 实例进行 JSR 303 验证。
- 支持使用 @RequestBody和@ResponseBody注解。
SpringMVC运行流程
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
新建一个maven项目,实现一个SpringMVC测试用例:
- ①在pom.xml中导入相关依赖:
声明式事务
- spring支持编程式事务管理和声明式事务管理两种方式。
- 编程式事务以代码的方式管理事务,换句话说,事务将由开发者通过自己的代码来实现。相对于核心业务而言,事务管理的代码显然属于非核心业务,如果多个模块都使用同样模式的代码进行事务管理,显然会造成较大程度的代码冗余。
- ①获取数据库连接Connection对象。
- ②取消事务的自动提交。
- ③执行操作。
- ④正常完成操作时手动提交事务。
- ⑤执行失败时回滚事务。
- ⑥关闭相关资源。
- 编程式事务以代码的方式管理事务,换句话说,事务将由开发者通过自己的代码来实现。相对于核心业务而言,事务管理的代码显然属于非核心业务,如果多个模块都使用同样模式的代码进行事务管理,显然会造成较大程度的代码冗余。