7).SpringMVC执行原理、MyBatis分页插件
(1)Spring执行原理
1)执行流程:
①浏览器发起了请求 "http://localhost:8888/SSM2/user/regist.do";
请求路径 -----> 控制器的类对应的方法(/user/regist.do-----UserController.regist();)
②请求参数接受,转化,绑定
③执行控制器拦截控制器相应方法的访问之前的 [HandlerInterceptor]-控制器的拦截器
④执行控制器 -----> ModelAndView[mav跳转返回值]
⑤执行控制器拦截器之后的一段代码。------mav[跳转返回值]
⑥将返回mav,解析出跳转路径,和跳转方式:"跳转方式:跳转路径"
⑦跳转: request.getRequestDispatcher("路径").forward(req,resp); //请求转发
response.sendRedirect(项目名/路径); //重定向
2)执行原理:
以上总结:
DispatcherServlet: SpringMVC核心控制器
作用:springmvc所有组件所有功能的核心控制器
HandlerMapping: 控制器映射器
作用:根据请求路径,找到对应控制器的方法
HandlerAdapter:控制器适配器
作用: ① 请求参数的接受,封装,转化
② 拦截器的调用过程
③ 调用控制器
ViewResolver:视图解析器
作用:根据控制器返回值 String|ModelAndView / 拦截器修改后mav
① 解析跳转方式
② 解析出跳转的路径
③ 解析出model中的数据,为了放入作用域。
(2)MyBatis分页插件:针对mybatis开发了插件
作用:
①接受pageNum和pageSize
②自动根据pageNum和pageSize计算start和end
③自动根据计算出的start和end,修改sql,改成分页结构,自动讲计算出来的start和end,绑定上去
④执行查询,将查询结果,返回list+count(page)
使用:
①导入jar:
jsqlparser-1.2
pagehelper-5.1.2
②将插件配置在mybatis配置文件中,plugins标签(Spring环境下的SqlSessionFactoryBean的配置中)
③编码:
//产生的效果
//根据pageNum,pageSize获得Page<Object>对象
//自动修改接下来紧跟着执行的查询语句,改为分页查询
//自动讲pageNum和pageSize计算出来的start和end绑定sql
第一步: Page<Object> page = PageHelper.startPage(pageNum,pageSize); //获取到了Page对象
第二步: List<实体> list = service.getAll(); //调用service查询
第三步: 从page中将查询结果的list和表总数count封装:自定义的PageBean
pageBean.setList(list); //查询到的list
pageBean.setPageNum(page.getPageNum()); //页码
pageBean.setPageSize(page.getPageSize()); //分页大大小
pageBean.setCount(page.getTotal()); //总行数