1 SSM综合复习 2

3 SSM综合复习 1 4 1. mybatis 3 5 1.1. mybatis第一天 3 6 1.1.1. MyBatis 框架概述 3 7 1.1.2. Mybatis 框架快速入门 3 8 1.2. mybatis第二天 4 9 1.2.1. mapper代理方式实现 CRUD 4 10 1.2.2. 核心配置文件中的标签设置 5 11 1.3. mybatis第三天 6 12 1.3.1. mybatis中的动态sql(重点) 6 13 1.3.2. 能够掌握一对多,多对多的配置(重点) 7 14 1.4. mybatis第四天 9 15 1.4.1. mybatis的延迟加载 9 16 1.4.2. mybatis的一级缓存二级缓存 10 17 1.4.3. mybatis中的注解开发 11 18 2. spring 13 19 2.1. spring第一天 13 20 2.1.1. spring的概述 13 21 2.1.2. 程序的耦合及解耦 14 22 2.1.3. IOC概念和spring中的IOC的XML配置 14 23 2.1.4. 依赖注入(Dependency Injection) 16 24 2.2. spring第二天 17 25 2.2.1. ioc的常用注解 17 26 2.2.2. 纯注解的ioc案例 18 27 2.2.3. spring和Junit整合 18 28 2.3. spring第三天 19 29 2.3.1. 动态代理 19 30 2.3.2. AOP 20 31 2.4. spring第四天 22 32 2.4.1. jdbcTemplate 23 33 2.4.2. 基于xml配置声明式事务管理 23 34 2.4.3. 基于annotation声明式事务管理 24 35 3. springmvc 25 36 3.1. springmvc第一天 25 37 3.1.1. springmvc概述 25 38 3.1.2. springmvc入门案例 25 39 3.1.3. springmvc执行流程 25 40 3.1.4. 请求参数的 绑定 26 41 3.1.5. 常用注解 26 42 3.2. springmvc第二天 27 43 3.2.1. 响应数据和结果视图 27 44 3.2.2. SpringMVC实现文件上传 28 45 3.2.3. springmvc的异常处理 29 46 3.2.4. SpringMVC框架中的拦截器 29 47 3.3. springmvc第三天 30 48 3.3.1. SSM整合 30 49 50 51 1. mybatis 52 1.1. mybatis第一天 53 1.1.1. MyBatis 框架概述 54 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程 55 笔试题:orm思想 56 对象关系映射 57 1.1.2. Mybatis 框架快速入门 58 步骤 59 1.创建maven工程,添加依赖 60 2.编写实体类和接口 61 3.编写映射配置文件(同包同名) 62 4.编写核心配置文件 63 5.编写测试类 64 加载配置文件 65 创建sqlSessionFactory 66 创建sqlSession 67 获取代理对象 68 代理对象调用方法 69 释放资源 70 测试类中设计的设计模式 71 构建者模式 72 工厂模式 73 代理模式 74 1.2. mybatis第二天 75 1.2.1. mapper代理方式实现 CRUD 76 mapper代理开发要求: 77 1.接口和映射文件要同包同名 78 2.持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名 79 3.SQL 语句的配置标签<select>,<insert>,<delete>,<update>的 id 属性必须和持久层接口的 80 方法名相同 81 4.parameterType要和接口中的传入参数类型相同 82 5.resultType要和接口中的返回结果类型相同 83 查询所有 84 添加 85 获取添加成功记录的id值 86 87 更新 88 删除 89 聚合函数 90 模糊查询 91 #{}和${}的区别: 92 #{}表示一个占位符 93 #{}可以实现prepareStatment向占位符中设置值,自动进行JDBC和java类型转换,防止ql注入 94 #{}可以接收简单类型值或pojo属性值,如果parameterType传输基本数据类型,值随便写 95 ----------------------------------------------------------------------------------------------- 96 ${}表示拼接sql串 97 ${}是将传入的参数原样拼接在sql中,不进行jdbc类型转换 98 ${}可以接收简单类型值或pojo属性值,如果parameterType传输基本数据类型,${}括号中只能是value 99 实体属性映射和表字段不匹配 100 别名 101 resultMap 102 1.2.2. 核心配置文件中的标签设置 103 properties:属性配置 104 resource属性:用于指定 properties 配置文件的位置,要求配置文件必须在类路径下 105 resource="jdbcConfig.properties" 106 url 属性:统一资源定位符 107 http://localhost:8080/mystroe/CategoryServlet 108 typeAliases:自定义别名 109 <!-- 单个别名定义 --> 110 <typeAlias alias="user" type="com.itheima.domain.User"/> 111 <!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) --> 112 <package name="com.itheima.domain"/> 113 mappers:映射器 114 方式一: 115 <mapper resource=" " /> 116 使用相对于类路径的资源 117 如:<mapper resource="com/itheima/dao/IUserDao.xml" /> 118 方式二: 119 <mapper class=" " /> 120 使用 mapper 接口类路径 121 如:<mapper class="com.itheima.dao.UserDao"/> 122 注意:此种方法要求 r mapper 接口名称和 r mapper 映射文件名称相同,且放在同一个目录中 123 方式三: 124 <package name=""/> 125 注册指定包下的所有 mapper 接口 126 如:<package name="cn.itcast.mybatis.mapper"/> 127 注意:此种方法要求 mar pper 接口名称和 r mapper 映射文件名称相同,且放在同一个目录中 128 1.3. mybatis第三天 129 1.3.1. mybatis中的动态sql(重点) 130 <if test=条件判断></if> 131 注意问题:1.条件判断中不能使用&&,要使用and 132 2.<if>标签的 test 属性中写的是对象的属性 133 <where></where> 134 简化 where 1=1 的条件拼装,我们可以采用<where>标签来简化开发,会自动删去 135 第一个and 136 <foreach> </foreach> 137 <foreach>标签用于遍历集合 138 collection: 代表要遍历的集合元素,注意编写时不要写#{} 139 open: 代表语句的开始部分 140 close: 代表结束部分 141 item: 代表遍历集合的每个元素,生成的变量名 142 separator: 代表分隔符 143 <select> 144 抽取重复的语句代码片段 145 <sql id="defaultSql"> 146 select * from user 147 </sql> 148 使用 149 include refid="defaultSql"></include> 150 1.3.2. 能够掌握一对多,多对多的配置(重点) 151 表关系 152 一对一 :人和身份证 153 一对多 :用户和订单 154 多对多 :学生和课程 155 实体中表示关系 156 一对多 157 一方实体中添加集合表示多方 158 多方实体中声明实体对象表示一方 159 多对多 160 双方实体中都添加集合表示对方 161 一对一查询中对返回结果集的封装 162 方式一 163 定义专门的 pojo 类作为输出类型,其中定义了 sql 查询结果集所有的字段 164 方式二 165 使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。 166 <association property="user" javaType="cn.itheima.domain.user"> 167 一对多查询对返回结果集的封装 168 使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。 169 <collection property="accounts" ofType="account"> 170 多对多查询中对返回结果集的封装 171 使用 resultMap,定义专门的 resultMap 用于映射一对一查询结果。 172 两方使用的标签都是 <collection property="user" ofType="user"> 173 1.4. mybatis第四天 174 1.4.1. mybatis的延迟加载 175 什么是立即加载 176 加载实体类数据时,关联数据也会立即加载 177 什么是延迟加载 178 加载实体类数据时,关联数据不会立即加载,当需要关联数据时才会被加载 179 一对一延迟加载配置 180 使用 assocation 实现延迟加载 181 1.编写持久层 DAO接口 182 2.持久层映射文件 183 184 3.开启 Mybatis 的延迟加载策略 185 <settings> 186 <setting name="lazyLoadingEnabled" value="true"/> 187 <setting name="aggressiveLazyLoading" value="false"/> 188 </settings> 189 一对多延迟加载配置 190 使用 Collection 实现延迟加载 191 1.编写持久层 DAO接口 192 2.持久层映射文件 193 194 3.开启 Mybatis 的延迟加载策略 195 <settings> 196 <setting name="lazyLoadingEnabled" value="true"/> 197 <setting name="aggressiveLazyLoading" value="false"/> 198 </settings> 199 1.4.2. mybatis的一级缓存二级缓存 200 缓存概念 201 存储在内存中的临时数据,使用缓存,可以减少与数据库的交互次数 202 一级缓存 203 1.默认开启 204 2.sqlSession范围 205 3.清空一级缓存的触发条件 206 增删改 207 sqlsession.close 208 sqlsession.clearCache 209 sqlSession.commit 210 二级缓存 211 1.默认不开启 212 2.二级缓存是 mapper 映射级别的缓存: 213 二级缓存是跨 SqlSession 的 214 二级缓存的开启 215 216 第一步:在 SqlMapConfig.xml 文件开启二级缓存 217 <setting name="cacheEnabled" value="true"/> 218 219 第二步:配置相关的 Mapper 映射文件 220 <cache></cache> 221 222 第三步:置 配置 statement 上面的 useCache 属性 223 useCache="true" 224 1.4.3. mybatis中的注解开发 225 常用注解 226 @Insert:实现新增 227 @Update:实现更新 228 @Delete:实现删除 229 @Select:实现查询 230 @Result:实现结果集封装 231 @Results:可以与@Result 一起使用,封装多个结果集 232 @ResultMap:实现引用@Results 定义的封装 233 @One:实现一对一结果集封装 234 @Many:实现一对多结果集封装 235 @CacheNamespace:实现注解二级缓存的使用 236 注解开发案例步骤 237 1.编写实体类 238 2.使用注解方式开发 持久层 接口@select 239 3.编写 SqlMapConfig 配置文件 240 4.编写测试方法 241 复杂关系映射的注解说明 242 @Results 注解 243 代替的是标签<resultMap> 244 @Resutl 注解 245 代替了 <id> 标签和<result> 标签 246 id 是否是主键字段 247 column 数据库的列名 248 property 需要装配的属性名 249 one 需要使用的@One 注解(@Result(one=@One)())) 250 many 需要使用的@Many 注解(@Result(many=@many)()) 251 @One 注解(一对一) 252 代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象 253 select 指定用的 来多表查询的 sqlmapper 254 fetchType 会覆盖全局的配置参数 lazyLoadingEnabled 255 取值: eager 256 lazy 257 default 258 @Many 注解(多对一) 259 代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象 260 一对一映射注解配置 261 262 一对多注解映射配置 263 264 2. spring 265 2.1. spring第一天 266 2.1.1. spring的概述 267 概述 268 spring是一个一栈式的轻量级开源框架 269 核心 270 IOC 271 控制反转:将对象的创建交给spring 272 DI:依赖注入 273 AOP 274 面向切面编程 275 优势 276 方便解耦,简化开发 277 AOP 编程的支持 278 方便集成各种优秀框架 279 体系结构 280 1.核心部分 281 2.AOP部分 282 3.数据访问部分 283 4.web部分 284 2.1.2. 程序的耦合及解耦 285 耦合 286 程序间的依赖关系,应力争做到高内聚,低耦合 287 解耦 288 通过对代码的优化来降低耦合,杜绝编译期依赖关系 289 解决耦合的思路 290 反射+XML 291 2.1.3. IOC概念和spring中的IOC的XML配置 292 准备工作 293 1.创建工程,导入依赖 294 2.创建业务层接口和实现类 295 3.创建持久层接口和实现类 296 入门案例 297 1.在类的根路径下创建的 一个任意名称的 xml 298 2.让 让 spring 管理 资源置 ,在配置文件中配置 service 和 和 dao 299 <bean id="" class=""> 300 3.测试 配置是否成功 301 ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); 302 IAccountService aService = (IAccountService) ac.getBean("accountService"); 303 System.out.println(aService); 304 bean标签:用于配置对象让 spring 来创建 305 属性 306 id:给对象在容器中提供一个唯一标识。用于获取对象。 307 class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。 308 scope:指定对象的作用范围。 309 singleton :默认值,单例的. 310 prototype :多例的. 311 实例化 Bean 的三种方式 312 默认无参构造函数 313 <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/> 314 静态工厂的方法创建对象 315 <bean id="accountService" 316 class="com.itheima.factory.StaticFactory" 317 factory-method="createAccountService"></bean> 318 实例工厂的方法创建对象 319 <bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean> 320 <bean id="accountService" 321 factory-bean="instancFactory" 322 factory-method="createAccountService"></bean> 323 2.1.4. 依赖注入(Dependency Injection) 324 概念 325 XML中对类之间的依赖关系进行维护 326 二种注入方式 327 构造函数注入 328 <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> 329 <constructor-arg name="name" value=" 张三 "></constructor-arg> 330 <constructor-arg name="age" value="18"></constructor-arg> 331 <constructor-arg name="birthday" ref="now"></constructor-arg> 332 </bean> 333 Set方法注入 334 <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> 335 <property name="name" value="test"></property> 336 <property name="age" value="21"></property> 337 <property name="birthday" ref="now"></property> 338 </bean> 339 注入集合属性 340 注入集合数据 341 List 结构的: 342 array,list,set 343 Map 结构的 344 map,entry,props,prop 345 2.2. spring第二天 346 2.2.1. ioc的常用注解 347 创建对象 348 1.@component 349 2.@controller 350 3.@service 351 4.@repository 352 相当于<bean id="" class=""> 353 依赖注入 354 @Autowired:自动按照类型注入 355 @Qualifier:在自动按照类型注入的基础之上,再按照 Bean 的 id 注入(不能独立使用) 356 @Resource:根据bean的id进行注入 357 @value:注入基本数据类型和 String 类型数据的 358 范围:单例多例 359 @Scope 360 singleton 361 phototype 362 生命周期 363 @PostConstruct:用于指定初始化方法。 364 @PreDestroy:用于指定销毁方法。 365 2.2.2. 纯注解的ioc案例 366 @Configuration 367 指定当前类是一个配置类 368 @ComponentScan("com.itheima") 369 用于通过注解指定spring在创建容器时要扫描的包 370 @Bean 371 作用:用于把当前方法的返回值作为bean对象存入spring的ioc容器中 372 测试:ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class); 373 @Import() 374 作用:用于导入其他的配置类 375 @PropertySource 376 作用:用于指定properties文件的位置 377 2.2.3. spring和Junit整合 378 @RunWith(SpringJUnit4ClassRunner.class):替换运行器 379 @ContextConfiguration(locations= {"classpath:bean.xml"}):指定配置文件路径 380 2.3. spring第三天 381 2.3.1. 动态代理 382 JDK动态代理:基于接口的动态代理 383 Proxy.newProxyInstance(参数1,参数2,参数3) 384 参数1:classloarder:类加载器 385 参数2:class[]:被代理类实现的全部接口 386 参数3:new invocationHandler:增强逻辑 387 388 public Object invork(参数1,参数2,参数3) 389 参数1:代理对象 390 参数2:当前执行的方法 391 参数3:当前执行的方法所需要的参数 392 393 ***代理对象调用任何方法都会执行invork方法 394 CGLIB:基于子类的动态代理 395 Enhancer.create(参数1,参数2,) 396 参数1:class:被代理对象的字节码 397 参数2:Callback:用于提供增强的代码 398 399 400 public Object intercept(参数1,参数2,参数3) 401 参数1:代理对象 402 参数2:当前执行的方法 403 参数3:当前执行的方法所需要的参数 404 405 ***代理对象调用任何方法都会执行intercept方法 406 2.3.2. AOP 407 概念 408 AOP:面向切面编程 409 作用 410 不修改源码的基础上,对已有方法进行增强 411 好处 412 减少重复代码 413 提高开发效率 414 维护方便 415 底层 416 动态代理 417 术语 418 Joinpoint( 连接点):所有可以被增强的方法 419 Pointcut( 切入点):真正被增强的方法 420 Advice( 通知/ 增强):增强的逻辑 421 Target( 目标对象):被代理对象 422 Weaving(织入):创建代理对象的过程 423 Proxy (代理):代理对象 424 Aspect(切面):切入点和通知结合的过程 425 切入点表达式说明 426 execution:匹配方法的执行(常用) 427 execution(表达式) 428 表达式语法:execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 429 430 execution(* com.itheima.service.impl.*.*(..)) 431 XML配置AOP步骤 432 第一步:创建代理类和被代理类的IOC配置 433 第二步:使用 aop:config 声明 aop 配置 434 第三步:使用 aop:aspect 配置切面 435 属性:id:给切面提供一个唯一标识。 436 ref:引用配置好的通知类 bean 的 id。 437 <aop:aspect id="txAdvice" ref="txManager"> 438 </aop:aspect> 439 第四步:使用 aop:pointcut 配置切入点表达式 440 属性: 441 expression:用于定义切入点表达式。 442 id:用于给切入点表达式提供一个唯一标识 443 <aop:pointcut expression="execution( 444 public void com.itheima.service.impl.AccountServiceImpl.transfer( 445 java.lang.String, java.lang.String, java.lang.Float) 446 )" id="pt1"/> 447 第五步:使用 aop:xxx 配置 对应的通知类型 448 aop:before:前置通知 449 aop:after-returning:后置通知 450 aop:after-throwing:异常通知 451 aop:after:最终通知 452 aop:around:环绕通知 453 基于注解的 AOP 454 第一步:把通知类使用 注解配置@Component("txManager") 455 第二步:在通知类上使用@Aspect 注解声明为切面 456 第三步:在增强的方法上使用注解配置通知@Before 457 第四步:在 spring 配置文件中开启 spring 对注解 AOP 的支持 458 <aop:aspectj-autoproxy/> 459 切入点表达式注解 460 @Pointcut 461 不使用 XML 的配置方式 462 @EnableAspectJAutoProxy 463 2.4. spring第四天 464 2.4.1. jdbcTemplate 465 概念 466 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装 467 作用 468 对数据库表进行crud 469 API 470 增删改:update(sql,可变参数) 471 查询多个:query(sql,new beanProperyRowMapper,参数) 472 查询一个:queryForObject(sql,new beanProperyRowMapper,参数) 473 2.4.2. 基于xml配置声明式事务管理 474 步骤 475 第一步: 配置事务管理器 476 第二步:配置事务的通知引用事务管理器 477 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 478 </tx:advice> 479 第三步:配置事务的属性 480 <tx:method name="*" read-only="false" propagation="REQUIRED"/> 481 <tx:method name="find*" read-only="true" propagation="SUPPORTS"/> 482 第四步:配置 AOP 切入点表达式 483 <!-- 配置 aop --> 484 <aop:config> 485 <!-- 配置切入点表达式 --> 486 <aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" 487 id="pt1"/> 488 </aop:config> 489 第五步:配置切入点表达式和事务通知的对应关系 490 <!-- 在 在 aop:config 标签内部:建立事务的通知和切入点表达式的关系 --> 491 <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/ 492 2.4.3. 基于annotation声明式事务管理 493 步骤 494 第一步:配置事务管理器 并注入数据源 495 <!-- 配置事务管理器 --> 496 <bean id="transactionManager" 497 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 498 <property name="dataSource" ref="dataSource"></property> 499 </bean> 500 第二步:在业务层使用@Transactional 注解 501 @Transactional 502 第 三步:在配置文件中开启 spring 对注解事务的支持 503 <tx:annotation-driven transaction-manager="transactionManager"/> 504 不使用 xml 的配置方式 505 @EnableTransactionManagement 506 3. springmvc 507 3.1. springmvc第一天 508 3.1.1. springmvc概述 509 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架 510 3.1.2. springmvc入门案例 511 1. 创建工程,导入依赖 512 2. web.mxl中配置核心控制器- Servlet 513 3. 创建 spring mvc 的配置文件 514 4. 编写控制器并使用注解配置 515 5.测试 516 3.1.3. springmvc执行流程 517 1、用户发送请求至前端控制器DispatcherServlet 518 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 519 3、处理器映射器根据请求url找到具体的处理器,并返回给DispatcherServlet。 520 4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器 521 5、执行处理器(Controller,也叫后端控制器)。 522 6、Controller执行完成返回ModelAndView 523 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet 524 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器 525 9、ViewReslover解析后返回具体View 526 10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。 527 11、DispatcherServlet响应用户 528 3.1.4. 请求参数的 绑定 529 基本类型参数 530 要求我们的参数名称必须和控制器中方法的形参名称保持一致 531 POJO 类型参数 532 要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型 533 数组和集合类型参数 534 给 List 集合中的元素赋值,使用下标 535 给 Map 集合中的元素赋值,使用键值对 536 3.1.5. 常用注解 537 RequestMapping 538 用于建立请求 URL 和处理请求方法之间的对应关系 539 RequestParam 540 把请求中指定名称的参数给控制器中的形参赋值 541 RequestBody 542 用于获取请求体内容 543 PathVaribale 544 用于绑定 url 中的占位符,例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符 545 CookieValue 546 用于把指定 cookie 名称的值传入控制器方法参数 547 ModelAttribute 548 可以用于修饰方法和参数 549 方法:出现在方法上,表示当前方法会在控制器的方法执行之前,先执行 550 参数:出现在参数上,获取指定的数据给参数赋值 551 SessionAttribute 552 用于多次执行控制器方法间的参数共享 553 3.2. springmvc第二天 554 3.2.1. 响应数据和结果视图 555 返回值分类 556 返回字符串 557 Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址 558 返回值是void 559 如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到 560 返回值是ModelAndView对象 561 ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图 562 SpringMVC框架提供的转发和重定向 563 forward请求转发 564 return "forward:/user/findAll"; 565 redirect重定向 566 return "redirect:/user/findAll"; 567 springmvc实现异步 568 ResponseBody响应json数据 569 @ResponseBody 570 3.2.2. SpringMVC实现文件上传 571 文件上传三要素 572 1.表单提交方式必须是post 573 2.必须有文件上传项,且有name值 574 3.enctype="multipart/form-data" 575 springmvc方式实现文件上传 576 SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的 577 name属性名称相同 578 配置文件解析器 multipartResolver 579 SpringMVC跨服务器方式文件上传 580 1.搭建图片服务器 581 2.实现SpringMVC跨服务器方式文件上传 582 3.2.3. springmvc的异常处理 583 异常处理思路 584 Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。 585 SpringMVC的异常处理 586 1.自定义异常类 587 2.自定义异常处理器 588 3. 配置异常处理器 589 3.2.4. SpringMVC框架中的拦截器 590 拦截器的概述 591 SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术 592 拦截器和过滤器的区别 593 过滤器配置了可以拦截任何资源 594 拦截器只会对控制器中的方法进行拦截 595 自定义拦截器步骤 596 1.创建类,实现HandlerInterceptor接口,重写需要的方法 597 2.在springmvc.xml中配置拦截器类 598 3.3. springmvc第三天 599 3.3.1. SSM整合 600 思路 601 Springmvc与spring整合 602 配置spring的监听器 603 mybatis与spring整合 604 将mybatis的配置交给spring编写 605 数据源 606 sessionFactroy 607 mapper映射 608 事务