SSM拷打最后一讲!!!
13. SpringMVC常见的注解有哪些?
SpringMVC 常见注解我一般按功能记。
请求映射相关有:
@RequestMapping
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
参数获取相关有:
@RequestParam
@PathVariable
@RequestBody
@RequestHeader
响应相关有:
@ResponseBody
@RestController
14. Springboot 常见注解有哪些?
Spring Boot 常见注解我会按场景分。
最核心的是@SpringBootApplication,它是启动类注解,里面包含@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan,其中@EnableAutoConfiguration是自动配置的核心。
配置读取方面,常用@Value读取单个配置项,@ConfigurationProperties批量绑定配置属性。
自动配置里还会经常看到条件注解,比如@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty,它们决定某个自动配置或 Bean 是否生效。
如果是 Web 项目,也会常用@RestController、@GetMapping、@PostMapping这些,但它们更准确说属于 SpringMVC 注解,只是在 Spring Boot 项目里很常见。
15. MyBatis执行流程?
读配置->解析成mappedstatement->构建出sqlsessionfactory->sqlsession获取代理对象-> 找对应的mappedstatement->executor->jdbc->映射成对象MyBatis 的执行流程我会分成初始化和真正执行 SQL 两段。
初始化时,MyBatis 会读取全局配置文件和 Mapper XML,解析成一个个MappedStatement,里面包含 SQL、参数映射、结果映射这些信息,然后构建出SqlSessionFactory。
真正执行时,我们先通过SqlSession获取 Mapper 接口的代理对象。调用 Mapper 方法时,代理对象会根据接口全限定名和方法名,找到对应的MappedStatement。然后交给Executor执行器处理。
执行过程中,MyBatis 会把方法参数映射到 SQL 里的占位符,底层通过 JDBC 执行 SQL。查询完成后,再把ResultSet结果集按照配置或实体字段映射成 Java 对象返回
16. Mybatis是否支持延迟加载?原理呢?
支持->用在哪->体现在哪->原理MyBatis 支持延迟加载,主要用于关联查询,比如一对一的association或一对多的collection。开启后,主对象查询出来时,不会马上把关联对象都查出来,而是在真正访问关联属性时再执行对应 SQL。
底层原理主要是动态代理。MyBatis 会给需要延迟加载的关联对象生成代理对象,当调用这个代理对象的方法时,代理会触发额外查询,通过 SqlSession 执行 SQL,把关联数据加载出来并返回。
这里要注意,延迟加载不是简单判断属性是不是 null,而是通过代理拦截访问行为来触发查询。
17. Mybatis的一级、二级缓存用过吗?
作用域->例子MyBatis 一级缓存我用得比较多,它是默认开启的,作用域是同一个SqlSession。也就是说,在同一个SqlSession里,如果执行相同 SQL、参数也一样,第二次查询可能直接从一级缓存拿,不再查数据库。但只要执行了增删改,或者提交、回滚、关闭SqlSession,一级缓存就会被清掉。
二级缓存我了解过,但项目里一般比较谨慎使用。它是 Mapper,也就是 namespace 级别的缓存,需要手动开启,多个SqlSession可以共享。但是它有一致性风险,尤其是多表查询或者数据更新比较频繁时,很容易出现缓存和数据库不一致。所以实际项目里,我们更多会用 Redis 做业务缓存,而不是依赖 MyBatis 二级缓存。
18. Mybatis的二级缓存什么时候会清理缓存中的数据?
当某个 Mapper (namespace) 下执行新增、修改、删除操作时,默认会清空该 namespace 下的二级缓存,避免后续 select 读到旧数据。
