当前位置: 首页 > news >正文

springboot+mybatis面试题

目录

1.MyBatis工作流程

2.${} 和 #{}的区别? 

3.mybatis多表关联查询如何实现一对一关联、一对多关联?怎么设置关联对象的类型? 

4.Mybatis的好处?mybatis的缓存机制,一级,二级介绍一下

5.mybatis给我们提供了哪些标签来生成动态SQL? 

6.Mybatis中resultType 和 resultMap 的区别? 

7.Spring IOC、DI、AOP是什么?

8.Spring中配置的单例bean默认什么时候初始化?如何实现懒加载? 

9.Springboot日志级别有哪些?如何更改日志级别 

10.Springboot自动配置的原理。 

11. Springboot添加Interceptor拦截器时,拦截器中preHandle、postHandle、afterCompletion方法含义?

12.@ConditionalOnClass、@ConditionalOnMissingClass分别是什么含义

13.我们要写一个过滤器需要哪些步骤?

14.SpringMVC拦截器和Servlet中的过滤器有什么区别?

15.springmvc接收参数的几种形式?

16.SpringMVC的工作流程? 

17.Spring 中事务的传播行为和隔离级别分别代表什么含义?并分别列举几个常用的传播行为和隔离级别

18.SpringMvc的作用及你对springmvc的理解?


1.MyBatis工作流程

        1.加载配置文件

        2.生成SqlSessionFactory

        3.建立SqlSession

        4.调用Mybatis提供的API

        5.查询Mapper配置文件

        6.返回结果

        7.关闭session

2.${} 和 #{}的区别? 

 ${}:简单字符串替换,把${}直接替换成变量的值,不做任何转换,这种是取值以后再去编译SQL语句,底层采用Statement语句,不能防止sql注入攻击。

• #{}:预编译处理,sql中的#{}替换成?,补全预编译语句,有效的防止Sql语句注入,这种取值是编译好SQL语句再取值。

3.mybatis多表关联查询如何实现一对一关联、一对多关联?怎么设置关联对象的类型? 

一对一关联和一对多关联都需要自定义标签 Assocication  Collection。

一对一通过标签定义,通过javaType指定关联对象的类型

一对多通过标签定义,通过ofType指定关联对象的类型

4.Mybatis的好处?mybatis的缓存机制,一级,二级介绍一下

 把Sql语句从Java中独立出来。

• 封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。

• 自己编写Sql语句,更加的灵活。

• 入参无需用对象封装(或者map封装),使用@Param注解

mybatis提供了缓存机制减轻数据库压力,提高数据库性能

mybatis的缓存分为两级:一级缓存、二级缓存

一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效

二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的

5.mybatis给我们提供了哪些标签来生成动态SQL? 

if标签: 判断标签,当参数符合判断条件拼接SQL语句。

where标签: 替代where关键字。

foreach标签: 向SQL传递数组或list,MyBatis使用foreach解析。

sql标签: 将实现的动态SQL判断代码块抽取出来,组成一个SQL片段,其它的statement中就通过`<include>`标签就可以引用SQL片段,方便程序员进行开发。

set标签:替代set关键字。

choose、when、otherwise标签:用于实现类似于编程语言中的 switch 语句的逻辑判断功能。

6.Mybatis中resultType 和 resultMap 的区别? 

resultType:自动映射,如果数据库结果集中的列名和要封装实体的属性名完全一致的话用 resultType 属性。

resultMap:手动映射,如果数据库结果集中的列名和要封装实体的属性名有不一致的情况用 resultMap 属性,通过 resultMap标签手动建立对象关系映射。

7.Spring IOC、DI、AOP是什么?

IOC:控制反转,将创建对象的权力转交给Spring,由 Spring 负责创建对象,管理对象,装配对象,并且管理这些对象的整个生命周期。

DI:我们在使用Spring 容器的时候,容器通过调用set 方法或者是构造器来建立对象之间的依赖关系。

AOP:面向切面编程,通过在不修改原有代码的情况下,将横切关注点(如事务管理、日志记录等)从核心业务逻辑中解耦出来,并在需要的地方进行统一的切面逻辑处理。

8.Spring中配置的单例bean默认什么时候初始化?如何实现懒加载? 

Spring中配置的单例bean默认在容器启动时就初始化。

懒加载:通过给添加lazy-init=”true”属性就可以将bean初始化的时机延迟到使用时

懒加载只要单例模式下有效

9.Springboot日志级别有哪些?如何更改日志级别 

日志级别:error、warn、info、debug、trace

更改日志级别:application.yml中配置:

logging:

 level:

  com:

   lanou: debug

10.Springboot自动配置的原理。 

1.当启动项目时,会执行@SpringbootApplication

2.该注解会启动其下的@EnableAutoConfiguration(自动装配)

3.自动装配的注解就是从 组件自动装配选择器(AutoConfigurationImportSelector)中读取组件列表

4.组件列表(META-INF/spring.factories)中就列举了众多需要进行整合的组件

5.就会找到对一个的组件类(xxxAutoConfiguration)

6.在组件类的上方就会判断当前项目是否需要与此组件整合 (@ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class}))

7.如果判断当前项目没有此类,则不会进行该组件的加载

8.如果判断当前项目有此类,则会读取与该组件整合的配置文件 (@EnableConfigurationProperties({DataSourceProperties.class}))

9.如果读取失败,则装配失败,项目报错

10,如果读取成功,则装配成功,springboot与该技术即整合成功

总结:整合什么技术 -- 导入该技术的jar包(场景包) -- 设置相关的属性 -- 整合成功

结论:

SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration;

每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。

xxxxProperties里面拿。

xxxProperties和配置文件进行了绑定;

生效的配置类就会给容器中装配很多组件;

只要容器中有这些组件,相当于这些功能就有了;

11. Springboot添加Interceptor拦截器时,拦截器中preHandle、postHandle、afterCompletion方法含义?

perHandle:在controller的方法调用前调用执行。

postHandle:在controller的方法执行之后,返回给前端数据之前调用执行。

afterCompletion:在整个执行流程结束之后调用执行。

12.@ConditionalOnClass、@ConditionalOnMissingClass分别是什么含义

@ConditionalOnClass:判断项目中是否有对应的类,有:创建bean对象,没有:不创建bean对象。

@ConditionalOnMissingClass:判断项目中是否有对应的类,有:不创建bean对象,没有:创建bean对象。

13.我们要写一个过滤器需要哪些步骤?

1. 创建一个普通Java类 

2. 实现Filter接口,重写doFilter、init(FilterConfig config)、destroy 

3. 通过在web.xml中配置、或者通过@WebFilter注解注册到容器中 

14.SpringMVC拦截器和Servlet中的过滤器有什么区别?

拦截器是SpringMVC框架中封装的一个组件,拦截的是让不让一个请求执行对应的Handler,过滤器是Servlet标准中的组件,拦截的是让不让一个请求访问Servlet或者页面。

1.拦截器是基于 java 的反射机制的,而过滤器是基于函数回调。

2.拦截器不依赖与 servlet 容器,过滤器依赖与 servlet 容器。

3.拦截器只能拦截控制器,过滤器可以拦截所有的资源:Servlet,JSP,HTML。

4.拦截器在控制器的生命周期中,可以多次被调用,过滤器在所有请求调用之前。

5.拦截器可以访问控制器上下文、值栈里的对象,而过滤器不能访问。

15.springmvc接收参数的几种形式?

方式一、原生 HttpServletRequest 接收数据

方式二:通过参数名称接收 要求 url后传递的参数名和方法的形参名保持一致

方式三、参数名称不一致时  @RequestParam(name = "username")  参数映射
     1、限制是否允许为空  @RequestParam 默认不允许为空
     @RequestParam(required = false)
     required = false  是否允许为空
     2、是否给默认值 @RequestParam(defaultValue = "12345")
方式四、通过对象接收数据 (当前端传递的参数名和对象的属性名保持一致时)

方法五、restful风格接收(@PathVariable 地址栏传参)

16.SpringMVC的工作流程? 

17.Spring 中事务的传播行为和隔离级别分别代表什么含义?并分别列举几个常用的传播行为和隔离级别

事务的传播行为说的是事务与事务之间的嵌套关系。比如B事务如果嵌套在A事务中时,是复用A事务,还是各用各的事务,还是将A事务挂起,仅在B事务中运行,亦或是不在事务中运行。

常用的传播行为:

传播行为含义
REQUIRED(默认)当前有事务则加入,没有则新建事务。
REQUIRES_NEW总是新建事务,并挂起当前事务(如果存在)。
SUPPORTS当前有事务则加入,没有则以非事务方式运行。
NOT_SUPPORTED以非事务方式运行,并挂起当前事务(如果存在)。
MANDATORY必须在事务中调用,否则抛出异常。
NEVER必须在非事务中调用,否则抛出异常。
NESTED如果当前有事务,则在嵌套事务中执行(子事务回滚不影响父事务)。

事务的隔离级别说的是事务与事务之间的可见性关系。比如A事务在提交到数据库之前,B事务能否读取到A事务操作的数据。

常用的隔离级别:

隔离级别含义存在的问题
READ_UNCOMMITTED最低级别,可能读到其他事务未提交的数据(脏读)。脏读、不可重复读、幻读。
READ_COMMITTED只能读到其他事务已提交的数据(解决脏读)。不可重复读、幻读。
REPEATABLE_READ同一事务内多次读取结果一致(解决脏读、不可重复读)。幻读(MySQL 通过 MVCC 部分解决)。
SERIALIZABLE最高级别,完全串行化执行(解决所有并发问题,但性能最差)。无并发问题,但性能低。

18.SpringMvc的作用及你对springmvc的理解?

作用:

spring MVC是一个分层的java web开发框架,MVC模式提供了一个分层的体系结构,其中每一层对其它层进行了抽象,具体如下:

1.模型(Model):应用程序所使用的特定域信息的表现形式

2.视图(View):域模型的表现形式(通过使用诸如输入元素和按钮之类的用户界面元素,而这些元素与模型进行交互)。

3.控制器(Controller):主要负责解释用户的输入并转换为模型,然后将转换后的结果显示给用户。

优点:

让我们能非常简单的设计出干净的Web层,进行更简洁的Web层的开发

天生与Spring框架集成(如IoC容器、AOP等)

提供强大的约定大于配置的契约式编程支持

非常灵活的数据验证、格式化和数据绑定机制

支持Restful风格

相关文章:

  • CQF预备知识:Python相关库 -- 插值过渡指南 scipy.interpolate
  • 接口测试常用工具及测试方法(基础篇)
  • [SKE]CPU 与 GPU 之间数据加密传输的认证与异常处理
  • 触觉智能RK3576核心板工业应用之软硬件全国产化,成功适配开源鸿蒙OpenHarmony5.0
  • aws s3 sdk c++使用指南、适配阿里云oss和aws
  • OCCT 中 BRepBuilderAPI_MakePolygon与BRepBuilderAPI_MakeWire
  • 5种常见的网络保密通信协议
  • 如何从 Ansys SpaceClaim 模型中提取 CAD 数据,该模型是在我计算机上安装的未来版本中创建的?
  • 亚马逊云服务器配置推荐
  • SMB协议在Windows内网中的核心地位
  • 华为:eSight网管平台使用snmp纳管交换机
  • React---Hooks深入
  • Shell 脚本:系统管理与任务自动化的利器
  • 基于Jenkins与Kubernetes的系统化变更管理实践
  • 【C/C++】创建文件夹
  • 单元测试基本步骤
  • vue3 全局过滤器
  • Bash (Bourne Again SHell)
  • Seedance:字节发布视频生成基础模型新SOTA,能力全面提升
  • 文本的数据分析
  • 用香港服务器做网站/重庆网站排名推广
  • 手机网站信任从哪里设置/seo推广软件下载
  • 有做外国人的零售网站吗/网站统计分析工具
  • 做网站的职业叫什么/湖南关键词优化品牌价格
  • 河北中石化建设网站/全网推广
  • 做设计英文网站/如何联系百度人工客服电话