面试题---Mybatis

Mybatis

MyBatis中${}取值和#{}取值的区别

{}能够防止SQL注入,因为底层使用PreparedStatement对象,预编译,性能较高

${}不能防止SQL注入,因为底层使用Statement对象,不会预编译而是拼接字符串,性能较低

能使用#{}时尽量使用#{},如果需要动态传入表名或者字段名需要用 ${}比如,像 ORDER BY 时只能使用${}

MyBatis关联查询中,延迟加载和饥饿加载的区别

延迟加载,是先从单表查询,需要使用关联数据的时候才发起关联查询,不用的时候不查询关联的数据,又叫懒加载,饥饿加载,是在查询时将关联的数据立即查询出来加载进内存,不管用不用

MyBatis对象关联查询和集合关联查询怎么做

单个关联对象用associate ,适用于多对一的关联查询,使用javaType来定义实体类型,集合用collection,适用于一对多的关联查询,使用ofType来定义集合的泛型类型

MyBatis一级缓存和二级缓存的区别

缓存,是指将从数据库查询出的数据存放在缓存中,下次使用相同查询时不必再从数据库查询,而是直接从缓存中读取,从而减轻数据库查询的压力,提高性能

mybaits中的一级缓存,是SqlSession级别,默认开启,使用同一个SqlSession发送相同的SQL时命中;它的生命周期和SqlSession一致,当调用SqlSession.close()方法时会释放缓存

mybatis中的二级缓存,是namespace级别,默认不开启,执行同一个namespace的相同statement,发送相同的SQL时命中;它的生命周期是程序结束

当SQL中执行了update()、delete()、insert()操作,则缓存中的数据都会清空

MyBaits的Mapper接口没有实现类为社么可以用@Autowired直接注入

动态代理,赋值给mapper接口引用的对象其实是一个代理对象,这个代理对象是由 JDK 动态代理创建的。在解析mapper的时候,mybatis会通过java反射,获取到接口所有的方法

当调用接口中方法时,将通过接口全限定名+方法名对应找到映射文件中namespace和id匹配的sql,然后将执行结果返回

在MyBatis如何动态修改SQL

使用Mybatis的拦截器可以做到

MyBatis的动态SQL标签有哪些?

if标签:条件判断

choose、when、otherwise标签:选择结构,类似java中的switch

trim标签:对包含的内容加上前缀,后缀

where标签:主要是用来简化SQL语句中where条件判断的,能智能的处理and or,不必担心多余导致语法错误

foreach标签:遍历元素

Mybatis的mapper如何传递多个参数

方式一,可以使用map进行传参,SQL中使用map的key来引用取值

方式二,可以在SQL中使用#{param1},#{param2}...来引用取值,它是根据mapper接口对应方法中形参的顺序进行匹配的,不管接口方法的参数名字叫个啥,SQL都只能使用param1,param2,等来取值

方式三,可以使用@Param注解,给mapper接口方法的参数命名,在SQL中直接使用取的名字来引用

Mybatis,关联对象查询,使用嵌套子查询和JOIN连表有什么区别

嵌套子查询,指的是在查询一个主对象的时候,使用单表查询,在resultmap中额外发送一个子sql查询关联对象,然后映射给主对象

连表join查询,指的是查询一个主对象的时候,使用join连表的方式把主对象和关联对象的数据一次性查出来,用resultmap映射结果

他们的区别,join连表查询只发一条sql就能把数据查询出来,嵌套子查询会有一个n+1的问题,就是说如果主查询出来n条数据,那么会额外发送n条子sql去查询对应的关联对象,加上主查询那1次,也就是n+1次,因此它的性能相对较低的,一般我们会使用join连表查询

为什么要使用连接池

对数据库的操作都需要取得连接,使用完都需要关闭连接,如果每次操作需要打开关闭连接,这样系统性能很低下。连接池就可以动态的管理这些连接的申请,使用和释放,我们操作数据库只需要在连接池里获取连接,使用完放回连接池,这样大大节省了内存,提高效率。

数据库连接池的原理主要分为三部分

  • 第一,连接池的建立,在系统初始化时建立几个连接对象以便使用。

  • 第二,连接池的管理,客户请求连接数据库时,首先查看连接池中是否有空闲连接,如果有直接分配,如果没有就等待,直到超出最大等待时间,抛出异常

  • 第三,连接池的关闭,当系统关闭时,连接池中所有连接关闭

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

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

相关文章

华杉研发九学习日记17 正则表达式 异常

华杉研发九学习日记17 一,正则表达式 ^ $ 作用: 测试字符串内的模式(匹配) 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证. 替换文本(替换》 可以使用正则表达式来…

vue3 学习笔记17 -- 基于el-menu封装菜单

vue3 学习笔记17 – 基于el-menu封装菜单 前提条件:组件创建完成 配置路由 // src/router/index.ts import { createRouter, createWebHashHistory } from vue-router import type { RouteRecordRaw } from vue-router export const Layout () > import(/lay…

PyTorch 2.0 GPU Nvidia运行库的安装

【图书推荐】《PyTorch深度学习与计算机视觉实践》-CSDN博客 假设读者电脑带有NVIDIA 20 以上系列的显卡。 我们以CUDA 11.7cuDNN 8.2.0(其他更高版本的组合,读者可以执行查阅PyTorch官网获得)为例,讲解PyTorch 2.0 GPU版本的安…

rt_container_of 作用和实现过程超级详解介绍

目录 作用 ptr 获取 偏移size获取 函数作用 我们先看段代码,了解rt_container_of有什么用处: #include "stdio.h" #define rt_container_of(ptr, type, member) \((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))struct ST…

Chrome谷歌浏览器Console(控制台)显示文件名及行数

有没有这样的困扰?Chrome谷歌浏览器console(控制台)不显示编译文件名及行数? 设置(Settings)- > 忽略列表(lgnore List)-> 自定义排除规则(Custom exclusion rules) 将自定义排除规则…

昇思学习打卡-22-生成式/DCGAN生成漫画头像

文章目录 DCGAN网络数据处理构造网络生成器判别器损失函数优化器 结果展示 我们将学习DCGAN网络如何数据处理、设置网络,包括生成器、判别器、损失函数、优化器等。 DCGAN网络 DCGAN(深度卷积对抗生成网络,Deep Convolutional Generative Ad…

go-kratos 学习笔记(1) 安装

简介: Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。 使用步骤: 安装cli工具 go install github.com/go-kratos/kratos/cmd/kratos/v2latest 创建项目 通过 kratos 命令创建项目模板 # 国内拉取失败可使用gitee源 krat…

项目实战--C#实现图书馆信息管理系统

本项目是要开发一个图书馆管理系统,通过这个系统处理常见的图书馆业务。这个系统主要功能是:(1)有客户端(借阅者使用)和管理端(图书馆管理员和系统管理员使用)。(2&#…

Mac装虚拟机占内存吗 Mac用虚拟机装Windows流畅吗

如今,越来越多的Mac用户选择在他们的设备上安装虚拟机来运行不同的操作系统。其中,最常见的是使用虚拟机在Mac上运行Windows。然而,许多人担心在Mac上装虚拟机会占用大量内存,影响电脑系统性能。此外,有些用户还关心在…

C++实现LRU缓存(新手入门详解)

LRU的概念 LRU(Least Recently Used,最近最少使用)是一种常用的缓存淘汰策略,主要目的是在缓存空间有限的情况下,优先淘汰那些最长时间没有被访问的数据项。LRU 策略的核心思想是: 缓存空间有限&#xff1…

Linux:传输层(2) -- TCP协议(1)

目录 1. TCP协议段格式 2. 解包/分用 3. 确认应答(ACK)机制 4. 超时重传机制 5. 连接管理机制 5.1 三次握手 5.2 四次挥手 5.3 TIME_WAIT状态 5.4 CLOSE_WAIT状态 1. TCP协议段格式 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去; 32位序号/32位确认号: 后面详…

科普文:5种Linux下软件部署方式说明

在Linux世界里,高效、灵活地安装和管理软件是每个系统管理员和开发者的基本功。从传统的RPM包管理,到便捷的YUM软件仓库,再到颠覆性的Docker容器技术,Snap,源码安装,每一种方法都有其独到之处,适…

FreeModbus学习——读输入寄存器eMBFuncReadInputRegister

FreeModbus版本:1.6 当功能码为04时,也就是读输入寄存器MB_FUNC_READ_INPUT_REGISTER 看一下它是怎么调用读输入寄存器处理函数的 当功能码为04时,调用读输入寄存器处理函数 这个函数在数组xFuncHandlers中,也就是eMBFuncRead…

实战:MyBatis适配多种数据库:MySQL、Oracle、PostGresql等

概叙 很多时候,一套代码要适配多种数据库,主流的三种库:MySQL、Oracle、PostGresql,刚好mybatis支持这种扩展,如下图所示,在一个“namespace”,判断唯一的标志是iddatabaseId,刚好写…

RuoYi-Vue-Plus (HiKariCp JDBC连接池)

一、简介 HikariCP 是一个高性能的 JDBC 连接池实现。它以其高性能、轻量级和自动管理的特点而广受 Java 开发者的青睐。以下是 HikariCP 的主要特点: 高性能:HikariCP 通过使用低开销的并发访问机制、有效地利用线程池、采用轻量级的对象池等技术,确保在高负载情况下依然能…

mysql索引结构

多种数据结构 在数据库索引领域,特别是MySQL的InnoDB存储引擎中,聚簇索引(Clustered Index)和非聚簇索引(也称为二级索引,Secondary Index)是两种主要的索引类型。这些索引类型在数据结构的选择…

最优化原理(笔记)

内积是线性代数运算的一个结果,一行*一列。 内积的性质! 什么是范数??? 对称矩阵:关于主对角线对称! 正定对称矩阵: 二阶导是正定的,f(x)就是严格的凸函数!&a…

spring部分源码分析及Bean的生命周期理解

前言: 本文整体框架是通过refresh方法这个入口进入分析:分析IOC容器的创建及一些Bean的生命周期的知识点,写得确实一般般,感觉自己的有些前置知识并没有理解的很到位,所以,这篇文件先记录一下,…

推荐一款开箱即用、开源、免费的中后台管理系统模版

项目介绍 vue-pure-admin 是推荐一款开箱即用、开源(遵循MIT License开源协议)、免费的中后台管理系统模版,完全采用 ECMAScript 模块(ESM)规范来编写和组织代码,使用了最新的 Vue3、 Vite、Element-Plus、…

无人机图像目标检测技术详解

当前研究领域的热点之一。无人机搭载的高清摄像头能够实时捕获大量图像数据,对这些数据进行有效的目标检测对于军事侦察、环境监测、灾害救援等领域具有重要意义。本文将对无人机图像目标检测技术进行详解,包括图像处理技术、目标检测算法、关键技术应用…