Mybatis面试题(四)

server/2024/9/20 4:01:16/ 标签: mybatis, java, spring

1、Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么

Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询。在 Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|false。

它的原理是,使用 CGLIB 创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用 a.getB().getName(),拦截器 invoke()方法发现 a.getB()是null 值,那么就会单独发送事先保存好的查询关联 B 对象的 sql,把 B 查询上来,然后调用 a.setB(b),于是 a 的对象 b 属性就有值了,接着完成 a.getB().getName()方法的调用。这就是延迟加载的基本原理。

当然了,不光是 Mybatis,几乎所有的包括 Hibernate,支持延迟加载的原理都是一样的。

2、Mybatis 的一级、二级缓存

1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。

2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配置

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

3、什么是 MyBatis 的接口绑定?有哪些实现方式

接口绑定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑定, 我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可以有更加灵活的选择和设置。

接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上@Select、@Update 等注解,里面包含 Sql 语句来绑定;另外一种就是通过 xml里面写 SQL 来绑定, 在这种情况下,要指定 xml 映射文件里面的 namespace 必须为接口的全路径名。当 Sql 语句比较简单时候,用注解绑定, 当 SQL 语句比较复杂时候,用 xml 绑定,一般用 xml 绑定的比较多。

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

  • Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同;
  • Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的parameterType 的类型相同;
  • Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的resultType 的类型相同;
  • Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径。

5、简述 Mybatis 的插件运行原理,以及如何编写一个插件

Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、Executor 这 4 种接口的插件,Mybatis 使用 JDK 的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是 InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。

编写插件:实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件


http://www.ppmy.cn/server/112812.html

相关文章

测量开关电源纹波的标准化流程是什么?

在电子技术的快速发展中,开关电源的设计与优化一直是工程师关注的焦点。其中,纹波的测量和控制是提升电源性能的关键步骤。本文将为大家介绍开关电源纹波测量的标准化流程,提升测试准确性。 一、准备工作 测量开关电源的纹波需要用到示波器和…

外发文件怎么打开?外发文件难打开?企业必备文件安全管理软件推荐!

"锦书难托,云水迢迢,信息安全路漫漫。" 外发文件是企业对外交流的重要载体,其安全性与便捷性之间的平衡,这是每一家企业不得不面对的课题。 当"外发文件怎么打开?"变成员工口中的常问之语…

EasyExcel实现复杂Excel的导入

最近项目中遇到一个复杂的Excel的导入,并且数据量较大。因为数据不规则,所以只能使用POI进行自定义读取,但是发现数据量大之后,读取数据非常耗时。后面换成EasyExcel,性能起飞。 1. Excel样板 如上图,需要…

仿人机器人

1. ZMP 1.1 二维分析: 着重看公式3.3,考虑对应于力矩为零时的那个作用点,即满足\(\tau(p_x) 0\)的点\(p_x\)。 1.2 三维分析: 力矩为零的作用点: 点p就是压强中心,也即ZMP。 当机器人运动的时候,一般情况下…

灯塔:MYSQL笔记(2)函数

函数 是指一段可以直接被另一段程序调用的程序或代码。 字符串函数 SELECT 函数(参数); 数值函数 SELECT 函数(参数); -- 生成一个六位验证码 select lpad(round(rand()*1000000,0) ,6,0)as 验证码; 日期函数 流程函数 总结: 约束: 1. 概述&#xff…

使用docker调试odoo

使用 Visual Studio Code (VSCode) 的 Dev Containers 进行 Odoo 开发和调试是一个高效的方法,尤其是当你希望在一个清洁且一致的开发环境中工作时。以下是设置和配置 Dev Container 以在 Docker 环境中单步调试 Odoo 系统的步骤: ### 步骤 1: 准备 Doc…

【LeetCode】08.字符串转换整数

题目要求 解题思路 本题没有难点,只需注意最大整数的比较时要切换成long long 代码实现 class Solution { public:int myAtoi(string s) {//标记正负号int flag1;long long ret0;int ns.size();int i0;//去除空格while(s[i] ) i;//识别符号if(s[i]-) flag-1;i…

Zynq7000系列FPGA中的DDRC纠错码(ECC)

仅在半总线宽度(16位)数据宽度配置中提供可选的ECC支持。这种配置下,外部DRAM DDR设备需要26位,其中16位用于数据,10位用于ECC。每个数据字节使用独立的5位ECC字段,这种模式提供了单错误纠正和双错误检测的…

拥抱分布式云:云基础设施的下个新时代

在技术不断发展的过程中,云计算早已成为一股变革力量,使企业能够以前所未有的速度进行扩展、创新和适应。虽然世界仍然需要大规模集中式数据中心所产生的强大计算能力,但“提供更好体验”这个需求正在将云计算进一步地推向边缘。 ​ 这种需求…

速盾:ddos防御整体方案,高防cdn防御可靠吗

DDoS攻击是一种利用多台僵尸主机向目标网络发动大规模流量攻击的方式,旨在使目标系统资源耗尽,导致服务不可用。为了保护网络安全,许多企业选择使用DDoS防御解决方案。而其中一种常见的方法是使用高防CDN进行防御。 高防CDN是指具备较强的DD…

【网络安全】XSS之HttpOnly防护(附实战案例)

原创文章,不得转载。 文章目录 HttpOnly的产生背景HttpOnly的用途配置HttpOnly实战案例总结HttpOnly的产生背景 随着Web应用程序的普及,安全性问题也愈发凸显,尤其是与会话管理相关的安全漏洞。在Web应用中,服务器通常会通过HTTP协议在客户端和服务器之间传递重要信息,如…

pdf怎么压缩小一些?推荐的几种PDF压缩方法

pdf怎么压缩小一些?在工作中,我们经常处理PDF文件。大文件不仅存储麻烦,还会拖慢传输速度。因此,我们通常希望将这些文件压缩成更小的尺寸。压缩后的文件更便于分享和管理,适用于云存储、社交媒体或其他在线平台&#…

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出

回归预测|基于粒子群优化核极限学习机PSO-KELM结合Adaboost集成的数据预测Matlab程序 多特征输入单输出 文章目录 一、基本原理1. 数据预处理2. PSO优化(粒子群优化)3. KELM训练(核极限学习机)4. AdaBoost集成5. 模型评估和优化6.…

奥威让您更懂现金流情况

企业现金流一旦出了问题都是大问题,会直接影响到企业的日常运作,甚至直接关系到企业能不能继续存活,因此现金流量表是企业财务分析中重要报表之一,也是企业监控财务监控情况的重要手段之一。那么这么重要的一份现金流量表该怎么做…

go常用代码

连接阿波罗: 默认properties类型 package mainimport ("fmt""github.com/apolloconfig/agollo/v4""github.com/apolloconfig/agollo/v4/env/config" )func main() {c : &config.AppConfig{AppID: "2222",Cl…

java后端开发-Mybatis连接数据库步骤

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

计算机网络11——数据库语法2

目录 1、变量 (1)局部变量 (2)会话变量 (3)系统变量 2、判断选择 (1)if选择语法 (2)case选择 3、循环 (1)while循环 (2)其他循环 4、存储过程 5、触发器 6、事务:transaction 事务的特性 使用 1、变量 (1)局部变量 函数里面定义的,变量名 …

leetcode:3176 求出最长好子序列 使用动态规划

3176. 求出最长好子序列 题目链接https://leetcode.cn/problems/find-the-maximum-length-of-a-good-subsequence-i/ 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标 i 满足 seq[i] ! se…

压缩大型语言模型 LLMs

压缩大型语言模型 LLMs 随着人工智能技术的迅猛发展,大型语言模型(LLMs)如GPT系列已成为自然语言处理领域的明星。然而,这些模型通常包含数十亿甚至上万亿的参数,导致巨大的计算和存储需求,限制了它们在消…

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景 "板凳龙",又称"盘龙",是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色,展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中&am…