Mybatis的一些常用知识点(面试)
什么是MyBatis?
Mybatis 是⼀个半 ORM(对象关系映射)框架,它内部封装了 JDBC。
它让开发者在开发时只需要关注 SQL 语句本身,不需要花费精⼒去处理加载驱动、创建连接等繁杂的过程
缺点:
SQL语句的编写⼯作量较⼤
SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
MyBatis运行过程?
1)创建SqlSessionFactory
2)通过SqlSessionFactory创建SqlSession
3)通过sqlsession执⾏数据库操作
4)调⽤session.commit()提交事务
5)调⽤session.close()关闭会话
#{}和${}的区别?
#{} 是占位符,预编译处理; KaTeX parse error: Expected 'EOF', got '#' at position 23: …接符**,没有预编译处理。 #̲{} 可以**有效的防⽌SQL…{} 不能防⽌SQL 注⼊
什么是预编译
预编译又称为预处理 , 进行代码文本的替换工作。
mapper中传递多个参数?
@Param传参。在Dao层函数的参数前面添加@Param注解指定每个参数的名称
public User selectUser(@Param("userName") String name, int @Param("deptId") deptId);<select id="selectUser" resultMap="UserResultMap">select * from userwhere user_name = #{userName} and dept_id = #{deptId}</select>
map传参。将多个参数封装成Map并传递到Mapper中。这种方法适合传递多个参数。#{}里面的名称对应的是Map里面的key名称。
public User selectUser(Map<String, Object> params);<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">select * from userwhere user_name = #{userName} and dept_id = #{deptId}</select>
JavaBean传参。#{}里面的名称对应的是 User类里面的成员属性。
和Map的区别:需要建一个实体类, parameterType处填写实体类路径
public User selectUser(Map<String, Object> params);<select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap">select * from userwhere user_name = #{userName} and dept_id = #{deptId}
</select>
顺序传参法。使用#{},#{}里面的数字代表传入参数的顺序(基本不使用)
实体类属性名和表中字段名不⼀样 ,怎么办?
在SQL语句中给表中字段名起别名,让字段名的别名和实体类的属性名⼀致就可以了。
模糊查询like语句该怎么写?
推荐使用CONCAT函数
CONCAT(‘%’,#{question},‘%’)
MyBatis 动态 sql 是做什么的?都有哪些动态 sql?
动态 sql 可以让我们在 xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。
MyBatis 提供了多种动态 sql 标签,比如:
<if></if><where></where>(trim,set)<choose></choose>(when, otherwise)<foreach></foreach>
MyBatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式
使用 <resultMap> 标签,逐一定义列名和对象属性名之间的映射关系。
有了列名与属性名的映射关系后,MyBatis 通过反射创建对象。同时使用反射给对象的属性逐一赋值并返回。
在SQL语句中给表中字段名起别名,让字段名的别名和实体类的属性名⼀致就可以了。
MyBatis 是否支持延迟加载
MyBatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询
延迟加载
延迟加载是一种优化技术,只在需要时才加载对象。可以减少应用程序启动时间和内存占用
MyBatis 执行一对一、一对多的关联查询
ResultMap查询:
MyBatis 提供了 ResultMap 来定义查询结果的映射关系,从而实现一对一的关联查询。首先,我们需要定义两个实体类,然后创建一个 ResultMap,将它们关联在一起。
创建两个实体类 A 和 B,然后使用 ResultMap 将它们关联在一起。通过 association 标签,我们告诉 MyBatis 在查询A时同时查询B信息,并将结果映射到 B 对象的 A 属性中。
使用嵌套查询:
分别定义了两个查询语句,一个查询书籍信息,另一个查询作者信息。然后,我们可以在代码中分别调用这两个查询,并将结果合并在一起,从而实现一对一关联查询。
MyBatis 都有哪些 Executor 执行器?它们之间的区别是什么?
MyBatis 有三种基本的 Executor 执行器:
SimpleExecutor(简单执行器): 每执行一次 update 或 select,就开启一个 Statement 对象,使用结束立刻关闭 Statement 对象。ReuseExecutor(重用执行器): 执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,使用结束后,不关闭 Statement 对象,而是放置于 Map内,供下一次使用。简言之,就是重复使用 Statement 对象。BatchExecutor(批处理执行器):执行 update,将所有 sql 都添加到批处理中,等待统一执行。它缓存了多个 Statement 对象,每个 Statement 对象都是 addBatch()完毕后,等待逐一执行 executeBatch()批处理
MyBatis 中如何指定使用哪一种 Executor 执行器?
在 MyBatis 配置文件中,可以指定默认的 ExecutorType 执行器类型,也可以手动
include标签的作用
- 通过include标签使SQL片段达到代码复用的目的。
<select id="selectById" resultMap="BaseResultMap">selectmy.*FROMsys_user my<include refid="test_where"/></select><sql id="test_where">WHEREmy.id = 1</sql>-- 执行结果:select my.* FROM sys_user my WHERE my.id = 1
MyBatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
虽然 MyBatis 解析 xml 映射文件是按照顺序解析的,但是,被引用的 B 标签依然可以定义在任何地方,MyBatis 都可以正确识别。
原理:MyBatis 解析 A 标签,发现 A 标签引用了 B 标签,但是 B 标签尚未解析到,此时,MyBatis 会将 A 标签标记为未解析状态,继续解析余下的标签,待所有标签解析完毕,MyBatis 会重新解析那些被标记为未解析的标签
相关文章:
Mybatis的一些常用知识点(面试)
什么是MyBatis? Mybatis 是⼀个半 ORM(对象关系映射)框架,它内部封装了 JDBC。 它让开发者在开发时只需要关注 SQL 语句本身,不需要花费精⼒去处理加载驱动、创建连接等繁杂的过程 缺点: SQL语句的编写⼯作量较⼤ SQ…...
stm32—ADC
1. 什么是ADC 生活中我们经常会用到ADC这种器件,比如说,当我们在使用手机进行语音通信时,ADC器件会将我们的声信号转换为电信号 (模拟信号 ---> 数字信号) 模拟信号: 模拟信号是指用连续变化的物理量表示的信息,其信…...
【微信小程序】吐槽生态之云开发服务端能力不足
回想起来,笔者开发小程序的经历也有4年多了,以前因为技术积累接触不到比较深层次的东西,也不理解软件生态这个概念,现在开发小程序的过程中,越来越觉得很多生态微信的进步空间很大。 问题引入 比如说,在迭…...
AnimateDiff论文解读
GitHub - Kosinkadink/ComfyUI-AnimateDiff-Evolved: Improved AnimateDiff for ComfyUI and Advanced Sampling Support 视频编码 定义: 首先,将视频数据转换为一系列的潜变量代码(latent codes)。这是通过一个预训练的自动编码器(auto-encoder)来完成的。操作: …...
C/C++控制台贪吃蛇游戏的实现
🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 一、…...
Linux 升级安装 Weblogic-补丁!
版本: RedHat 6.5 Weblogic 10.3.6.0 ----------------------------------------------------------------- 1.查看当前 weblogic 补丁版本 cd /weblogic/utils/bsu/ ./bsu.sh -prod_dir/weblogic/wlserver_10.3/ -statusapplied -verbose -view 2.卸载旧补丁…...
苍鹰来啦!快来看呀!NGO-BiTCN-BiGRU-Attention北方苍鹰算法优化多重双向深度学习回归预测
苍鹰来啦!快来看呀!NGO-BiTCN-BiGRU-Attention北方苍鹰算法优化多重双向深度学习回归预测 目录 苍鹰来啦!快来看呀!NGO-BiTCN-BiGRU-Attention北方苍鹰算法优化多重双向深度学习回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…...
关于WebSocket必知必会的知识点
什么是WebSocket WebSocket是一种网络传输协议,可以在单个TCP连接上进行全双工通信,位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,服务器可以主动向客户端发送消息。在WebSocket API中,浏览器和…...
Go 1.19.4 Sort排序进阶-Day 12
1. 结构体(切片)排序 结构体返回的是切片。 之前学习了sort.Ints()和sort.Strings(),使用这两个sort库下面的方法,可以对int和strings进行排序。 那如果我要对自定义类型进行排序,怎么办,sort库没提供&…...
python-求距离(赛氪OJ)
[题目描述] 给你一个 1−>n 的排列,现在有一次机会可以交换两个数的位置,求交换后最小值和最大值之间的最大距离是多少?输入格式: 输入共两行。 第一行一个数 n 。 第二行 n 个数表示这个排列。输出格式: 输出一行一…...
《第二十一章 传感器与定位 - 传感器应用》
《第二十一章 传感器与定位 - 传感器应用》 在当今的移动应用开发中,充分利用设备的传感器能够为用户带来更加智能和便捷的体验。本章将重点探讨加速度传感器、方向传感器和光线传感器的应用。 一、传感器应用的重要性 随着智能手机和移动设备的普及,传感…...
Windows系统命令
Windows系统命令 Windows 系统中的命令行工具是指令式编程语言,可以用来执行各种任务、管理文件和目录、监控系统状态等。下面是一个 Windows 命令应用实例: 1. 文件操作 cd:用于改变当前目录。例如,cd Documents 将当前目录更…...
C语言函数递归
前言与概述 本文章将通过多个代码并赋予图示,详细讲解C语言函数递归的定义和函数递归的运算过程。 函数递归定义 程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。它…...
【python数据分析11】——Pandas统计分析(分组聚合进行组内计算)
分组聚合进行组内计算 前言1、groupby方法拆分数据2、agg方法聚合数据3、apply方法聚合数据4、transform方法聚合数据5 小案例5.1 按照时间对菜品订单详情表进行拆分5.2 使用agg方法计算5.3 使用apply方法统计单日菜品销售数目 前言 依据某个或者几个字段对数据集进行分组&…...
高性能web服务器
目录 一、简介 (一)nginx-高性能的web服务端 (二)用户访问体验 二、I/O模型 (一)概念 (二)网络I/O模型 (三)阻塞型 I/O 模型 (四…...
微服务案例搭建
目录 一、案例搭建 1.数据库表 2.服务模块 二、具体代码实现如下: (1) 首先是大体框架为: (2)父模块中的pom文件配置 (3)shop_common模块,这个模块里面只需要配置pom.xml,与实体…...
SAP负库存
业务示例 在系统中,对于一些物料而言,不能立即将收到的交货输入为收货。如果要使发货无论如何都是可以过帐的,则需要允许这些物料的负库存。 负库存 发货数量大于预订数量时,过帐该发货就会出现负库存。如果由于组织原因&#…...
集团数字化转型方案(三)
集团数字化转型方案通过系统整合人工智能(AI)、大数据、云计算和物联网(IoT)技术,建立了一个全面智能化的业务管理平台,涵盖从业务流程自动化、数据驱动决策支持,到客户体验优化和供应链管理的各…...
ESP32智能设备:蓝牙音箱、AI语音助手、环境监测与调节以及智能控制,基于BLE与MQTT技术(代码详解)
本文将介绍如何实现一个功能丰富的ESP32项目,集成蓝牙音箱、AI语音助手、智能设备控制器、环境监测与调节等功能。通过本项目,您将学习到硬件设计、嵌入式编程、蓝牙技术、音频处理、人工智能与语音识别、物联网平台、数据分析及用户界面构建等技术。 一…...
web渗透测试 学习导图
web渗透学习路线 前言 一、web渗透测试是什么? Web渗透测试分为白盒测试和黑盒测试,白盒测试是指目标网站的源码等信息的情况下对其渗透,相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透,以下所说的Web…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
