mybatis面试题 一

article/2025/9/20 1:59:46

一、MyBatis工作原理?

1、 创建SqlSessionFactory

2、 通过SqlSessionFactory创建SqlSession

3、 通过sqlsession执行数据库操作

4、 调用session.commit()提交事务

5、 调用session.close()关闭会话

1)读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。

2)加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

3)构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory

4)创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。

5)Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 

SqlSession 传递的参数动态地生成需要执行的 SQL 语句同时负责查询缓存的维护

6)MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。

7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。

8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

二、mybatis #{}和${}的区别

#{}是占位符预编译处理${}是拼接符字符串替换,没有预编译处理

#{} 可以有效的防止SQL注入,提高系统安全性;${} 不能防止SQL 注入

把{}替换成变量的值,相当于JDBC中的Statement编译

模糊查询like语句该怎么写

(1)’%${question}%’ 可能引起SQL注入,不推荐

(2)CONCAT(’%’,#{question},’%’) 使用CONCAT()函数,推荐

Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值。

三、mybatis在mapper中如何传递多个参数

方法1:顺序传参法

#{}里面的数字代表传入参数的顺序。

这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

方法2:@Param注解传参法

#{}里面的名称对应的是注解@Param括号里面修饰的名称。

这种方法在参数不多的情况还是比较直观的,推荐使用。

 

方法3:Map传参法

#{}里面的名称对应的是Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

 方法4:Java Bean传参法

#{}里面的名称对应的是User类里面的成员属性。

这种方法直观,需要建一个实体类,扩展不容易,需要加属性,但代码可读性强,业务逻辑处理方便,推荐使用。

四、使用MyBatis的mapper接口调用时有哪些要求?

1、Mapper接口方法名和mapper.xml中定义的每个sql的id相同

2、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql类型相同。

3、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

4、Mapper.xml文件中的namespace即是mapper接口的类路径。mapper接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。

五、mybatis mapper接口工作原理?

mapper接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

六、Mybatis是否可以映射Enum枚举类?

Mybatis可以映射枚举类,不只可以映射枚举类,Mybatis可以映射任何对象到表的一列上映射方式为自定义一个TypeHandler实现TypeHandler的setParameter()和getResult()接口方法

TypeHandler有两个作用一是完成从javaType至jdbcType的转换二是完成jdbcType至javaType的转换,体现为setParameter()和getResult()两个方法,分别代表设置sql问号占位符参数获取列查询结果

 

 

七、Mybatis的一级、二级缓存

1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session

当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。

2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,

不同在于其存储作用域为 Mapper(Namespace)并且可自定义存储源,如 Ehcache默认不打开二级缓存,要开启二级缓存,使用二级缓存的属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/> ;

3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后默认该作用域下所有 select 中的缓存将被 clear


http://chatgpt.dhexx.cn/article/lwOOeoSI.shtml

相关文章

Java面试题Tomcat的优化经验

来源&#xff1a;传智论坛 Tomcat作为Web服务器&#xff0c;它的处理性能直接关系到用户体验&#xff0c;下面是几种常见的优化措施&#xff1a; 一、掉对web.xml的监视&#xff0c;把jsp提前编辑成Servlet。有富余物理内存的情况&#xff0c;加大tomcat使用的jvm的内存 二、服…

Tomcat相关面试题,看这篇就够了!保证能让面试官颤抖!

Tomcat相关的面试题出场的几率并不高&#xff0c;正式因为如此&#xff0c;很多人忽略了对Tomcat相关技能的掌握&#xff0c;下面这一篇文章最早发布在知识星球&#xff0c;整理了Tomcat相关的系统架构&#xff0c;介绍了Server、Service、Connector、Container之间的关系&…

【Tomcat专题】简单认识一下Tomcat总体架构

文章目录 什么是Tomcat&#xff1f;Tomcat的主要工作Tomcat总体架构连接器容器 请求定位流程 什么是Tomcat&#xff1f; 在Tomcat官方网站上是这样介绍的。 The Apache Tomcat software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jaka…

四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!

俗话说&#xff0c;站在巨人的肩膀上看世界&#xff0c;一般学习的时候也是先总览一下整体&#xff0c;然后逐个部分个个击破&#xff0c;最后形成思路&#xff0c;了解具体细节&#xff0c;Tomcat的结构很复杂&#xff0c;但是 Tomcat 非常的模块化&#xff0c;找到了 Tomcat最…

Tomcat常见面试题

1、tomcat有哪些组件&#xff1f; 2、tomcat有哪些Connector&#xff1f; http ajp 3、tomcat的Valve的作用是什么&#xff1f; 给每一个虚拟主机定义访问日志 4、servlet的生命周期&#xff1f; Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过…

【金三银四】Tomcat面试题(2021最新版)

目录 前言 1、Tomcat的缺省端口是多少&#xff0c;怎么修改&#xff1f; 2、tomcat 有哪几种Connector 运行模式(优化)&#xff1f; 3、Tomcat有几种部署方式&#xff1f; 4、tomcat容器是如何创建servlet类实例&#xff1f;用到了什么原理&#xff1f; 5.tomcat 如何优化…

Tomcat面试题(2020最新版)

文章目录 Tomcat是什么&#xff1f;Tomcat的缺省端口是多少&#xff0c;怎么修改tomcat 有哪几种Connector 运行模式(优化)&#xff1f;Tomcat有几种部署方式&#xff1f;tomcat容器是如何创建servlet类实例&#xff1f;用到了什么原理&#xff1f;Tomcat工作模式Tomcat顶层架构…

「面试必背」Tomcat面试题(收藏)

「面试必背」Tomcat面试题&#xff08;建议收藏&#xff09; 2022-04-27 16:31java柚子茶 前言 在工作中&#xff0c;作为 Java 开发的程序员&#xff0c;Tomcat 服务器是大家常用的&#xff0c;也是很多公司现在正在用的。但是&#xff0c;在系统并发量比较大的情况下&…

Tomcat面试题(总结最全面的面试题)

Tomcat是什么&#xff1f; Tomcat 服务器Apache软件基金会项目中的一个核心项目&#xff0c;是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首…

【面试】Tomcat面试题

文章目录 Tomcat是什么&#xff1f;Tomcat的缺省端口是多少&#xff0c;怎么修改怎么在Linux上安装Tomcat怎么在Linux部署项目Tomcat的目录结构类似Tomcat&#xff0c;发布jsp运行的web服务器还有那些&#xff1a;tomcat 如何优化&#xff1f;tomcat 有哪几种Connector 运行模式…

Linux面试问题---常用命令

Linux面试问题---常用命令 1、cd命令 用于切换当前目录&#xff0c;参数是要切换到的目录的路径。 Cd /root/Documents #切换到/root/Documents目录Cd ./path 切换到当前目录下的path目录 Cd ../path 切换到上层目录下的path目录 2、ls命令 查看文件与目录的命令 3、grep…

Linux命令面试突击

Linux 命令常见面试题总结。 其它面试知识点突击整理&#xff1a; 序号文章1Java基础面试突击2JVM面试突击3设计模式面试突击4并发编程面试突击5消息队列Kafka面试突击6Redis面试突击7计算机网络面试突击8Spring面试突击9Dubbo面试突击10MyBatis面试突击11操作系统面试突击12…

Linux面试题(2020最新版)

Java面试总结&#xff08;2021优化版&#xff09;已发布在个人微信公众号【技术人成长之路】&#xff0c;优化版首先修正了读者反馈的部分答案存在的错误&#xff0c;同时根据最新面试总结&#xff0c;删除了低频问题&#xff0c;添加了一些常见面试题&#xff0c;对文章进行了…

Linux面试问题

grep和find的区别&#xff1f; 所以简单点说说&#xff0c;grep是查找匹配条件的行&#xff0c;find是搜索匹配条件的文件。 find /dir -name filename grep的使用干货&#xff1a; ls -l | grep ^a 通过管道过滤ls -l输出的内容&#xff0c;只显示以a开头的行。 grep test…

Linux面试总结

一.常用命令 1.目录切换 cd / 切换到根目录 cd ../ 切换到上级目录 cd ~ 切换到home目录 2.查看目录 ls 列出当前目录下所有的文件 ls [路径] ls / 查看根目录 ls -l 相当于 ll 最常用的命令,用了表的方式列出当前目录的内容 3.查看当前目录 pwd- 4.创建一组空文件 touch 5.显…

Linux面试相关知识点看着一文就够了

今天和大家分享一下linux操作系统下主要用到的几个知识点&#xff0c;分别是&#xff1a;linux目录结构、linux常用命令、文件权限操作、服务操作、yum安装命令、docker服务、vim编译器、pymysql测试连接、用户及组命令、mysql创建用户和数据库 目录 一、linux目录结构 二、l…

面试要求 熟悉linux系统,Linux面试中最常问的10个问题总结

前言 如果你要去面试一个linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了。这些都是比较基本的问题,大家要理解,不能光死记硬背。 1、如何查看系统内核的版本 这里有两种方法: 1) uname -a uname 这个命令是用来打印系统信息的, -a …

「面试必背」Linux面试题(2022最新版)

作为 Java 的从业者&#xff0c;在找工作的时候&#xff0c;一定会被问及关于Linux 相关的知识。Linux知识的掌握程度&#xff0c;在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的Linux面试题目&#xff0c; 提供给大家学习参考。 1. 什么…

Linux面试题(总结最全面的面试题)

Linux 概述 什么是Linux Linux是一套免费使用和自由传播的类似Unix操作系统&#xff0c;一般的WEB项目都是部署都是放在Linux操作系统上面。 Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支…

2022(招聘季)linux面试高频题

大家好&#xff0c;今天给大家分享一下2022最新最全的linux面试高频题&#xff0c;希望你们喜欢。 linux运维工程师在面试的时候经常会被问到各种问题&#xff0c;接下来我也会根据自己的经验将面试题整理下来供大家参考。有不同见解的欢迎打扰&#xff01;&#xff01;&#x…