「MyBatis」MyBatis面试宝典:全面解析常见问题和难点

这里写目录标题

  • 1. 什么是mybatis?
  • 2.怎么理解持久层?
  • 3. 说一说Mybaits的优点和缺点
  • 4. #{}和${}的区别是什么?
  • 5. PreparedStatement类
  • 6. mybatis的一级缓存和二级缓存
  • 7. Mybatis中 Dao接口和XML文件的SQL如何建立关联

面试题-》:Mybatis常见面试题总结

1. 什么是mybatis?

它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低

  1. 什么是ORM?

对象关系映射(Object RelationMapping)。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,Student类就对应student表,一个Student对象就对应student表中的一行数据

  1. 为什么mybatis是半自动的ORM框架?

用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。

2.怎么理解持久层?

持久层就像是一个“数据仓库”,负责把程序中的数据安全地保存起来,以便需要时能够方便地取出来或者更新。它就像是一个桥梁,连接着程序和数据库之间的数据交流,确保数据的稳定存储和可靠访问。

3. 说一说Mybaits的优点和缺点

优点:

  1. 与JDBC相比,减少了50%的代码量,取消了手动开关连接
  2. 可以与数据库的表结构字段进行一一对应,可以灵活编写SQL语句在XML中
  3. 可以与各种数据库兼容
  4. 能够与spring很好的集成

缺点:

  1. 当业务查询繁琐的时候,需要编写复杂的sql语句
  2. SQL语句依赖于数据库,移植性差,不能随意更换数据库

4. #{}和${}的区别是什么?

${}是字符串替换,#{}是预处理;使用#{}可以有效的防止SQL注入,提高系统安全性。
Mybatis在处理${}时,就是把${}直接替换成变量的值。而Mybatis在处理#{}时,会对sql语句进行预处理,将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值

5. PreparedStatement类

PreparedStatement是Java中用于执行预编译SQL语句的接口。它继承自Statement接口,并提供了一种更高效和安全的方式来执行SQL查询和更新操作。

使用PreparedStatement的步骤如下:

  1. 创建PreparedStatement对象:通过Connection的prepareStatement方法创建PreparedStatement对象,需要传入预编译的SQL语句。
  2. 设置参数值:使用PreparedStatement的set方法设置SQL语句中的参数值。
  3. 执行SQL语句:通过executeQuery方法执行查询语句,或者通过executeUpdate方法执行更新语句。

下面是一个简单的示例,演示了如何使用PreparedStatement执行查询操作:

String sql = "SELECT * FROM users WHERE username = ?";
try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, "john");try (ResultSet rs = pstmt.executeQuery()) {while (rs.next()) {// 处理查询结果String username = rs.getString("username");int age = rs.getInt("age");// ...}}
} catch (SQLException e) {e.printStackTrace();
}

在上述示例中,我们创建了一个PreparedStatement对象,并使用setString方法设置了参数值。然后通过executeQuery方法执行查询,并使用ResultSet遍历查询结果。

通过使用PreparedStatement,我们可以利用预编译的特性,提高查询性能并增加代码的安全性。此外,PreparedStatement还支持批量操作和获取自动生成的主键等功能,使得数据库操作更加灵活和高效。

6. mybatis的一级缓存和二级缓存

一级缓存

  1. 在一个SqlSession的生命周期内,执行2次相同的SQL查询,则第二次SQL查询会直接取缓存的数据,而不走数据库
  2. 默认开启

缓存失效原因

  • 在同一个SqlSession下执行增删改操作时(不必提交),会清除一级缓存
  • SqlSession提交或关闭时(关闭时会自动提交),会清除一级缓存
  • 对mapper.xml中的某个CRUD标签,设置属性flushCache=true,这样会导致该MappedStatement的一级缓存,二级缓存都失效(一个CRUD标签在mybatis中会被封装成一个MappedStatement)
  • 在全局配置文件中设置 ,这样会使一级缓存失效,二级缓存不受影响

二级缓存

  1. 多个SqlSession之间共享的缓存,可以跨SqlSession共享数据
  2. 二级缓存需要我们手动开启

开启二级缓存

  • 首先在全局配置文件 mybatis-configuration.xml 文件中加入如下代码:
<!--开启二级缓存  -->
<settings>    <setting name="cacheEnabled" value="true"/>
</settings>
  • springboot配置开启二级缓存
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.demo.entityconfiguration:cache-enabled: true
  • 在XXXmapper.xml文件中使用缓存
	<!-- 开启二级缓存 --><cache></cache><!-- 开启二级缓存,配置缓存属性(二选一) --><cache type="org.apache.ibatis.cache.impl.PerpetualCache"><property name="eviction" value="LRU" /><property name="flushInterval" value="6000000" /><property name="size" value="1024" /><property name="readOnly" value="false" /></cache>

7. Mybatis中 Dao接口和XML文件的SQL如何建立关联

推荐文章-》:Mybatis中 Dao接口和XML文件的SQL如何建立关联

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive Thrift Server

hive-site.xml配置文件 <property><name>hive.server2.thrift.bind.host</name><value>node1</value> </property>hive.server2.thrift.bind.host: This property determines the host address to which the HiveServer2 Thrift service …

pyqt学习网站

PySide 6.PyQt 6快速开发与实战最新章节_孙洋洋著_掌阅小说网 PyQt6开发及实例 - 知乎 Python开发GUI常用库PyQt6和PySide6介绍之一&#xff1a;简介与安装_pyside6 pyqt-CSDN博客 Qt for Python

HBase 的安装与部署

目录 1 启动 zookeeper2 启动 Hadoop3 HBase 的安装与部署4 HBase 高可用 1 启动 zookeeper [huweihadoop101 ~]$ bin/zk_cluster.sh start2 启动 Hadoop [huweihadoop101 ~]$ bin/hdp_cluster.sh start3 HBase 的安装与部署 &#xff08;1&#xff09;将 hbase-2.0.5-bin.tar.…

视频压缩会影响画质吗?正确答案在这里!

在当今数字时代&#xff0c;我们生活在一个高清、甚至是4K视频的世界中。随之而来的是巨大的视频文件大小&#xff0c;这在存储、传输和分享方面都带来了一些挑战。为了解决这一问题&#xff0c;许多人转向视频压缩&#xff0c;以便更有效地管理和共享视频内容。 然而&#xf…

c++ Windows获取软件安装列表信息

链接 #include <windows.h> #include <stdio.h> #include <iostream> #include <vector>using namespace std;#ifndef MSVCR #define _T #define _tcscpy strcpy #define _stprintf sprintf #define _tcscmp strcmp #endifclass SetupSoftInfo { publ…

嵌入式开发的常用软件、学习资源网站推荐

1、软件推荐 1.1、文本编辑软件 ——Notepad 1、适合编写和查看文本文件&#xff0c;也可以安装插件来查看二进制文件、对比文件 2、参考博客&#xff1a;《Notepad实用小技巧》&#xff1b; 1.2、PDF文件阅读软件——福昕PDF阅读器 福昕PDF阅读器&#xff0c;在官网就可以下载…

「Vue3系列」Vue3 混入(mixins)

文章目录 一、Vue3 混入二、Vue3 混入-选项合并1. 数据对象&#xff08;Data&#xff09;2. 方法&#xff08;Methods&#xff09;3. 计算属性&#xff08;Computed&#xff09;4. 侦听器&#xff08;Watchers&#xff09;5. 生命周期钩子&#xff08;Lifecycle Hooks&#xff…

终于用上最新的Claude-3-opus和Claude-3-sonnet!

3 月 4 日&#xff0c;被称为 OpenAI 最强竞争对手的大模型公司 Anthropic 宣布推出 Claude3 系列模型&#xff0c;与 Gemini 类似&#xff0c;模型按照大小分为三个&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。Opus 目前在官方发布的测试成绩中全方位超越…

信息安全与阿里云等保三级方案实践总结

信息安全在当今数字化时代变得至关重要&#xff0c;企业和组织需要采取有效措施来保护其数据和信息资产。阿里云作为中国领先的云服务提供商&#xff0c;提供了等保三级方案&#xff0c;帮助用户满足国家信息安全等级保护的要求。本文将探讨信息安全和阿里云等保三级方案的重要…

FPGA——三速自适应以太网设计(1)基本模块

FPGA——以太网设计&#xff08;1&#xff09;基本模块 1. 协议解析&#xff08;1&#xff09;MAC层&#xff08;2&#xff09;IP层 和 ARP层&#xff08;3&#xff09;UDP层 和 ICMP层 2.1 MAC接收模块2.2 MAC发送模块3.1 IP接收模块3.2 IP发送模块4.1 UDP接收模块4.2 UDP发送…

密码是“1234”,德国军事机密被窃

近日&#xff0c;德国军方高层秘密会议录音遭窃听&#xff0c;这段敏感音频的泄露令德国国防部陷入危机。 这段录音也在德国联邦国防军内部流传&#xff0c;多名士兵确认了录音的真实性。 报道称&#xff0c;俄罗斯社交网络上确实流传着一段时长半小时的视频会议录音。它是由…

Flask入门三(Flask-session的使用、数据库链接池、wtforms、Flask定制命令、Flask-Cache)

文章目录 一、Flask-session使用1.使用方式一2.使用方式二3.读RedisSessionInterface源码4.flask-session补充 二、数据库连接池1.flask中使用mysql2.上述问题解决 使用数据库连接池1.第三方数据库连接池2.操作数据库不带池版3.池版和非池版压测 三、wtforms四、Flask定制命令1…

Excel中怎么求排名

使用Rank函数 1.在需要显示排名的单元格内&#xff0c;输入“RANK&#xff08;数值&#xff0c;数值列表&#xff0c;排序方式&#xff09;” 2.将“数值”替换为需要计算排名的单元格的地址&#xff0c;例如E2单元格。 3.将“数值列表”替换为排名的数值范围&#xff0c;例…

在win10中下载桌面版的docker并在docker中搭建运行基于linux的容器

在win10中下载桌面版的docker 1.背景 在很多时候需要linux系统部署项目&#xff0c;在win10中安装虚拟机并在虚拟机中安装linux系统比较繁琐&#xff0c;可以利用win10自带的hyper-v的虚拟机管理工具&#xff0c;打开该虚拟机管理工具&#xff0c;安装docker&#xff0c;并在…

如何应对IT服务交付中的问题?看了本文DevOps就懂了

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

vue接入百度地图获取经纬度

通过城市名称和城市中心经纬度来获取当前所在地图&#xff0c;当前经纬度中心获取可以通过后端获取 静态文件包&#xff0c;替换baidu.html中的ak值&#xff0c;ak值通过百度地图官方网站申请 申请&#xff1a;百度地图API申请步骤 - 知乎 代码示例文件&#xff1a; 链接&a…

记录vue3导入并使用echarts自定义主题文件设置统一图表样式

在做数据可视化网站时&#xff0c;有时需要用到多个图表&#xff0c;这时就需要对图表的样式做一个统一的设计使网站外观更整齐。具体步骤如下&#xff1a; 第一步&#xff1a;在echarts官网定制好主题&#xff0c;并下载js文件 第二步&#xff1a;在index.html文件引入该文件…

【MybatisPlus】BaseMapper详解,举例说明

一、BaseMapper 简介 MyBatis-Plus 的核心类 BaseMapper 主要是用于提供基本的 CRUD&#xff08;创建、读取、更新、删除&#xff09;操作的接口定义。它是 MyBatis-Plus 框架中的一个重要组成部分&#xff0c;可以大大简化基于 MyBatis 的数据访问层代码的编写。 BaseMapper…

视频产品介绍:国标28181网关(GB/T28118网关)

目 录 一、概述 二、产品功能 &#xff08;一&#xff09;功能描述 &#xff08;二&#xff09;功能展示 1、国标接入 2、资源绑定 三、产品能力 &#xff08;一&#xff09;接入能力 &#xff08;二&#xff09;多级架构 四、特点优势 &#xff08;一&am…

Rust泛型与trait特性,模仿接口的实现

泛型是一个编程语言不可或缺的机制。 C 语言中用"模板"来实现泛型&#xff0c;而 C 语言中没有泛型的机制&#xff0c;这也导致 C 语言难以构建类型复杂的工程。 泛型机制是编程语言用于表达类型抽象的机制&#xff0c;一般用于功能确定、数据类型待定的类&#xf…