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

Mybatis的面试题

1. 什么是一级缓存什么是二级缓存?

MyBatis是一款优秀的持久层框架,它提供了一级缓存和二级缓存来提高数据库访问性能。

一级缓存

一级缓存是指在同一个SqlSession中进行的缓存。当MyBatis执行查询时,查询结果会被缓存在SqlSession的内存中,如果再次执行相同的查询,MyBatis会先检查一级缓存中是否有相同的查询结果,如果有就直接返回缓存的结果,而不再去数据库中执行查询。一级缓存的有效范围是同一个SqlSession,当SqlSession关闭时,一级缓存也会被清空。

二级缓存

二级缓存是指多个SqlSession共享的缓存。当MyBatis执行查询并将结果缓存到二级缓存中时,其他SqlSession也可以从这个二级缓存中获取相同的查询结果。因此,当有多个SqlSession对同一个数据进行操作时,可以通过二级缓存避免多次查询数据库。需要注意的是,二级缓存是跨SqlSession的,但是默认情况下是关闭的,需要手动配置开启。

总的来说,一级缓存是SqlSession级别的缓存,生命周期较短,而二级缓存是多个SqlSession共享的缓存,生命周期较长。使用缓存可以减少数据库的访问次数,提高系统性能,但同时也需要注意缓存的更新策略和缓存带来的数据一致性问题。

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

  1. #{}语法:

    • #{}语法表示使用预编译的SQL语句,使用占位符将参数值安全地替换到SQL语句中。这种方式可以有效防止SQL注入攻击,并且会自动进行参数类型转换。
    • 例如:SELECT * FROM user WHERE id = #{id}。在执行SQL语句时,#{id}会被实际的参数值替换,类似于预编译语句中的占位符。
  2. ${}语法:

    • ${}语法表示使用文本替换的方式将参数值直接嵌入到SQL语句中,不进行预编译处理。这种方式更加灵活,但也存在一些风险,如SQL注入攻击。
    • 例如:SELECT * FROM user WHERE id = ${id}。在执行SQL语句时,${id}会被实际的参数值直接替换,相当于简单的文本替换。

区别总结:

  • #{}是预编译的占位符语法,更安全,能够防止SQL注入,会自动进行参数类型转换。
  • ${}是文本替换的方式,更灵活,但潜在地存在SQL注入风险,不进行参数类型转换。

因此,为了安全起见,推荐在构建动态SQL时多使用#{}占位符语法,并避免直接使用${}语法。

3.resultMap,resultType的区别,怎么实现的?

在MyBatis中,resultMapresultType都是用于映射查询结果的元素,但它们有一些区别。

  1. resultMap

    • resultMap是用于定义复杂的结果集映射关系的元素。通过resultMap可以指定如何将查询结果映射到对象的属性,可以处理多表联合查询、嵌套查询等复杂的映射情况。
    • 通常情况下,当需要进行复杂的结果映射时,会使用resultMap来定义映射规则,然后在SQL语句中引用这个resultMap
    • resultMap的定义包括了对每个查询字段与对象属性之间的映射关系,可以灵活地处理各种复杂的查询结果映射情况。
  2. resultType

    • resultType是用于简单的结果映射的元素,用于指定查询结果应该被映射到的对象类型。通常用于简单的查询,只需要将结果映射到一个简单的JavaBean对象时使用。
    • 当查询结果只有一张表的字段,且这些字段可以直接映射到一个JavaBean对象的属性时,可以使用resultType来指定结果映射的目标类型。

实现方式:

  • resultMap的实现方式是通过在MyBatis的映射文件中使用<resultMap>元素来定义映射规则,其中可以指定字段到属性的映射关系、嵌套结果映射等。
  • resultType的实现方式是通过在SQL语句的SELECT语句中使用resultType属性来指定结果映射的目标类型,通常是一个简单的JavaBean类型。

总结:

  • resultMap适用于复杂的结果集映射,能够处理多表联合查询、嵌套查询等复杂情况。
  • resultType适用于简单的结果集映射,适用于将查询结果映射到单个JavaBean对象的情况。

在实际使用中,根据查询的复杂度和结果映射的需求,选择使用resultMapresultType来定义查询结果的映射关系。

代码示例:

  1. 使用resultMap进行结果映射:
<!-- 在映射文件中定义resultMap -->
<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="username" column="username"/><result property="age" column="age"/>
</resultMap><!-- 在SQL语句中引用resultMap -->
<select id="selectUserById" resultMap="userResultMap">SELECT user_id, username, age FROM user WHERE user_id = #{userId}
</select>
  1. 使用resultType进行结果映射:
<!-- 直接在SQL语句中指定resultType -->
<select id="selectUserById" resultType="User">SELECT user_id, username, age FROM user WHERE user_id = #{userId}
</select>

相关文章:

Mybatis的面试题

1. 什么是一级缓存什么是二级缓存&#xff1f; MyBatis是一款优秀的持久层框架&#xff0c;它提供了一级缓存和二级缓存来提高数据库访问性能。 一级缓存 一级缓存是指在同一个SqlSession中进行的缓存。当MyBatis执行查询时&#xff0c;查询结果会被缓存在SqlSession的内存中…...

渗透测试之内核安全系列课程:Rootkit技术初探(五)

今天&#xff0c;我们来讲一下内核安全&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 目前&#xff0c;在渗透测试领域&#xff0c;主要分为了两个发展方向&#xff0c;分别为Web攻防领域和PWN&#xff08;二进制安全&#xff09;攻防领域。在…...

探索C嘎嘎的奇妙世界:第三关---缺省参数与函数重载

在c语言中,我们常常在对有参函数进行传参,这样的繁琐过程,C祖师爷对此进行了相关改进,多说无益,上干货: 1 缺省参数: 缺省参数是指在声明或定义函数时为函数的形参指定一个默认值&#xff08;默认参数&#xff09;。在调用该函数时&#xff0c;如果没有指定实参&#xff0c;则…...

docker拉取镜像太慢解决方案

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 创建daemon.json文件,输入以下信息 vim /etc/docker/daemon.json{"registry-mirrors": ["https://9cpn8tt6.mirror…...

仅凭一图,即刻定位,AI图像定位技术

AI图像定位技术&#xff0c;解锁空间密码&#xff01;仅凭一图&#xff0c;即刻定位&#xff0c;精准至经纬度坐标&#xff0c;让世界无处不晓。 试试看能否猜中这张自拍照的背景所在&#xff1f;可别低估了A的眼力&#xff0c;答案说不定会让你大吃一惊呢。 近期&#xff0c;…...

跟着刘二大人学pytorch(第---12---节课之RNN基础篇)

文章目录 0 前言0.1 课程视频链接&#xff1a;0.2 课件下载地址&#xff1a; 1 Basic RNN1.1 复习DNN和CNN1.2 直观认识RNN1.3 RNN Cell的内部计算方式 2 具体什么是一个RNN&#xff1f;3 使用pytorch构造一个RNN3.1 手动构造一个RNN Cell来实现RNN3.2 直接使用torch中现有的RN…...

父亲节 | 10位名家笔下的父亲,读懂那份孤独而深沉的父爱

Fathers Day 母爱如水&#xff0c;父爱如山。 相对于母爱的温柔&#xff0c;父亲的爱多了几分静默和深沉。 读完10位名家笔下的父亲&#xff0c;我们就会明白&#xff0c;到底亏欠了父亲多少。 不要让自己有“子欲养而亲不待”的后悔和遗憾&#xff0c; 多给父亲一些爱的表示&a…...

股市中的牛市和熊市是什么?它们是怎么来的?

中文版 股市中的牛市和熊市 定义 牛市&#xff1a; 牛市指的是金融市场中证券价格普遍上升或预期上升的时期。这个术语最常用于股票市场&#xff0c;但也可以适用于交易的其他资产&#xff0c;如债券、货币和商品。特征&#xff1a; 投资者信心增加。交易量上升。积极的经济指…...

基于51单片机万年历设计—显示温度农历

基于51单片机万年历设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 本系统采用单片机DS1302时钟芯片LCD1602液晶18b20温度传感器按键蜂鸣器设计而成。 1.可以显示年月日、时分秒、星期、温度值。…...

springboot-自定义properties文件

在springboot中&#xff0c;如果我们想加载外部的配置文件&#xff0c;但是又不想与其他的配置文件产生明显的耦合&#xff0c;那么我们可以把这些配置文件&#xff0c;单独弄成一个独立的配置文件&#xff0c;比如下面的配置文件&#xff0c;我们想把这些配置移动到user.prope…...

java类的访问权限

在java中&#xff0c;针对类&#xff0c;成员方法和属性&#xff0c;java提供了4种访问控制权限&#xff0c;分别是private,default,protected和public。 这四种访问控制权限按级别由低到高的次序排列分别是privae,default,protected,public private:私有访问权限&#xff0c…...

【SpringBoot + Vue 尚庭公寓实战】标签和配套管理接口实现接口实现(六)

【SpringBoot Vue 尚庭公寓实战】标签和配套管理接口实现接口实现&#xff08;六&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】标签和配套管理接口实现接口实现&#xff08;六&#xff09;1、保存或更新标签信息2、根据id删除标签信息3、根据类型查询配套列表4、新…...

Web前端中横线:深入探索与实际应用

Web前端中横线&#xff1a;深入探索与实际应用 在Web前端开发的广袤领域中&#xff0c;中横线这一看似简单的元素&#xff0c;实则蕴含着丰富的设计哲学和技术实现。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对中横线在Web前端中的应用进行深入剖析&#x…...

鸿蒙 游戏来了 鸿蒙版 五子棋来了 我不允许你不会

团队介绍 作者:徐庆 团队:坚果派 公众号:“大前端之旅” 润开鸿生态技术专家,华为HDE,CSDN博客专家,CSDN超级个体,CSDN特邀嘉宾,InfoQ签约作者,OpenHarmony布道师,电子发烧友专家博客,51CTO博客专家,擅长HarmonyOS/OpenHarmony应用开发、熟悉服务卡片开发。欢迎合…...

国产MCU芯片(2):东软MCU概览及触控MCU

前言: 国产芯片替代的一个主战场之一就是mcu,可以说很多国内芯片设计公司都打算或者已经在设计甚至有了一款或多款的量产产品了,这也是国际大背景决定的。过去的家电市场、过去的汽车电子市场,的确国产芯片的身影不是很常见,如今不同了,很多fabless投身这个行业,一种是…...

气膜馆的保温措施—轻空间

气膜馆是一种新型的建筑形式&#xff0c;广泛应用于体育场馆、仓储、展览等多个领域。其主要特点是通过气体压力支撑膜结构&#xff0c;实现大跨度无柱空间。为了保证气膜馆在不同气候条件下的使用舒适性和能源效率&#xff0c;保温措施至关重要。以下是气膜馆常见的保温措施及…...

UniVue更新日志:使用Carousel组件实现轮播图效果

github仓库 稳定版本仓库&#xff1a;https://github.com/Avalon712/UniVue 开发版本仓库&#xff1a;https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库&#xff1a;https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 今天的更…...

docker和docker compose 部署

一. 将微服务运行在docker上&#xff1a; 1.新建一个空文件夹docker-demo&#xff0c;在里面再新建文件夹app&#xff0c;在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…...

鸿蒙轻内核A核源码分析系列六 MMU协处理器(2)

3、MMU汇编代码 在arch\arm\arm\include\arm.h文件中&#xff0c;封装了CP15协处理器相关的寄存器操作汇编函数。我们主要看下MMU相关的部分。 3.1 CP15 C2 TTBR转换表基地址寄存器 代码比较简单&#xff0c;结合下图&#xff0c;自行查看即可。该图来自《ARM Cortex-A9 Tec…...

C# 集合(一) —— Array类

总目录 C# 语法总目录 集合一 Array 集合1. Array 类1.1 搜索1.2 排序1.3 翻转1.4 转换 集合 1. Array 类 //创建方式 //方式一 Array arr Array.CreateInstance(typeof(string), 3); arr.SetValue("lisi", 0); arr.SetValue("zhangsan", 1); arr.SetVa…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...