ssm 整合 步骤
1创建Maven工程项目 添加依赖
2 在config包中编写servlet配置类 继承AbstractAnnotationConfigDispatcherServletInitializer 并重写类中 3个方法 让其加载springConfig springMvc 配置拦截路径 让这个路径下的文件都归springmvc处理
解决中文乱码问题 也是在这个servlet类中编写
2.1编写spring配置类,在配置类中需要扫描service的包,读取外部配置文件,加载Mybatis相关配置,开启事务注解驱动
2.1.1创建Mybatis配置类,配置SqlSessionFactoryBean和MapperScannerConfigurer
2.1.2创建Jdbc配置类,配置DataSource与DataSourceTransactionManager
2.2编写SpringMvc配置类,在配置类中扫描controller的包,开启SpringMVC的注解支持
3.1创建表与实体类
3.2Dao接口的内方法
3.3在Service包中编写BookService的方法 与在service包中的impl包中实现BookServcie
在写事务时候我们要注意 最好编写在service的实现类中具体需要事务的方法上
3.4 在controller包中编写BookController 对应的响应体
3.4.1在此之前因为给前段发送的数据要统一在一个类中 不管我们发什么最后都要存放在这个类中 所以我们先编写一个Result 类表示最后的数据接受类
3.4.2 其中code 类表示 查询(添加 修改 删除)数据库成功未成功 给前段人员返回的值 以便辨别成功未成功
3.4.3然后我们在编写 controller 控制器给前段响应的数据 与接受前端的请求数据
我们用三元运算符直接编写 增删改如果成功的话会在类中返回行数是>0的所以我们在Dao层编写时候会在返回值类型上写int 如果>0就表明成功 即下图的flag成立输出CODE.SAVE_OK 给前端返回过去
在查询时候我们判断查询的结果里面的值是不是为null 如果是不是null 表示查询成功 如果为null的话我们要写一个msg (即在 Result类中定义的msg)表示返回的错误信息
全局异常处理器
项目中首先将异常进行分类,大概分为业务异常、系统异常和其他异常,针对不同的异常使用自定义异常来区分,在项目的个层如果碰到指定的异常,统一将异常网上抛出,最后在SpringMVC层使用全局异常处理器类来对异常进行统一处理。
自定义异常的实现步骤为:1.编写全局异常处理器类,在类上添加@ControllerAdvice/@RestControllerAdvice,然后在类中针对不同的异常编写方法来进行处理,每个方法上添加@ExceptionHandler(异常类.class),在每个方法中就可以根据业务需求来进行不同的业务处理,比如记录日志、发送消息给运维人员,发送的方式可以通过邮件或者短信来进行发送
自定义异常类 我们要继承RuntimeException 在写一个成员变量code 并在Code类中写一些自己定义的错误信息 主要在自定义异常类中编写setCode getCode方法
拦截器
使用步骤:
1.编写拦截器类实现HandlerInterceptor接口
2.重写接口中的三个方法preHandle、postHandle、afterCompletion,
preHandle是在handle方法执行之前执行,返回true或者false,true代表放行,false代表拦截
postHandle是在handle方法执行之后执行
afterCompletion是拦截器最后执行的方法
3.配置拦截器类
应用场景:
1.项目中进行鉴权,判断用户是否登录,以及判断用户是否具有访问资源的权限等
2.日志记录,可以对重要的业务进行日志记录,方便后期统计请求访问量
3.对项目的业务进行性能监控,监控请求处理时长等
4.通用行为,如果有多个处理器都需要的业务就可以考虑使用拦截器
也可以在springMvcConfig中直接实现WebMvcCpnfiger (但是这样不好 因为有稍强的侵略式行为)
过滤器与拦截器有什么不同呢
1.拦截器是基于Java的反射机制而过滤器是基于函数回调
2.拦截器不依赖Servlet容器,过滤器则依赖Servlet容器
3.拦截器主要是针对springmvc的controller请求处理,而过滤器则可以针对集合所有请求起作用
4.拦截器可以获取到controller类及对应方法的相关数据,过滤器则不能获取
5.拦截器中可以使用spring容器中的bean对象,比如service对象,但是过滤器则不行
6.过滤器先于拦截器执行
SSM后端与前端交互的流程
1.前端发送请求和数据到后台
2.后台根据业务创建数据库表
3.根据数据库表创建实体类
4.编写Controller类接收请求、接收数据、转发业务层
5.编写Service接口和实现类,调用Mapper层进行数据的增删改查
6.编写Mapper接口,在接口中编写方法与对用的SQL语句
7.controller将处理结果响应给前端
8.前端将后台返回的结果展示给用户