一、SpringBoot
1、什么是springboot?
用来简化spring应用的初始搭建以及开发过程,使用特定方式进行配置main方法运行,内置tomcat无需部署war文件,简化maven配置,自动配置spring添加,对应功能starter自动配置,简化spring应用开发的去繁从简产品级应用。
springboot是spring下的子项目,一站式解决方案,主要简化了spring的难度,提供了各种启动器,包含以下特点:
独立运行:内嵌了各种servlet容器、tomcat、jetty等,只需要一个jar包就能独立运行;
简化配置:springboot-starter-web启动器自动依赖其余组件,减少了maven配置;
自动配置:能根据当前类路径下的类、jar包来自动配置bean;
无代码生成和xml配置:配置过程中无代码生成,无需xml配置文件就能完成所有配置工作,借助于注解完成。
应用监控:springboot提供一系列端点可以监控服务及应用,做健康检测。
2、事务是怎么去控制的,如何实现管理事务的
底层使用aop创建代理对象就可以产生事务了
3、核心注解是那几个,由什么组成?
启动类上面的注解**@SpringBootApplication**即 Spring Boot 的核心注解。
主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件包名扫描,注册bean。
4、常用注解有哪些?
- @RestController :Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合,将调用的结果直接返回给调用者。
- @RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。@RequestMapping(“/path”)表示该控制器处理所有“/path”的UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
- @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
- @ComponentScan 组件扫描,发现和组装一些Bean。
- @ResponseBody @RequestParam
- @AutoWired:自动注入,自动从spring的上下文找到合适的bean来注入。属于单例模式
- @PathVariable
- @Service用于标注业务层组件
- @Controller用于标注控制层组件
- @Repository用于标注数据库访问Dao组件
- @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
- @Value:注入Spring boot application.properties配置的属性的值。
- @GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。同理PostMapping也是一个组合注解,是RequestMapping(method = RequestMethod.POST)的缩写。
- @PathVariable:获取url中的数据。
- @EnableAutoConfiguration自动配置。
- @Data 自动生成setter、getter方法。
- @Import:用来导入其他配置类。
- @ImportResource:用来加载xml配置文件。
- @Bean:放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
- @Inject:等价于默认的@Autowired,只是没有required属性;
5、springboot自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
二、Mybatis
1、mybatis模糊查询#和$什么区别?
#{} :是预编译处理,mybatis在处理#{}时,会将sql中的#{}替换为?号,调用preparedStatement的set方法来赋值,可以有效防止SQL注入;
**
∗
∗
:是字符串替换,就是把
{}** :是字符串替换,就是把
∗∗:是字符串替换,就是把{}替换成变量的值,无法防止SQL注入。
2、两级缓存以及缓存的查找顺序
一级缓存:是SqlSession级别的缓存,默认开启。在操作数据库时需要构造sqlSession对象,底层实际上是在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。在底层update方法也就是新增、删除、更新时会清除一级缓存,在查询的时候会先从缓存中查询,没有再查询DB,然后再放入一级缓存
二级缓存:是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
缓存的查找顺序:二级缓存 => 一级缓存 => 数据库
先从二级缓存查,没有再查一级,没有再查db。