Java 5.3 - MyBatis

news2024/9/24 19:19:00

#{} ${} 的区别是什么?

${} 是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如 ${driver} 被静态替换为 com.mysql.jdbc.Driver

#{} 是 sql 的参数占位符

xml 映射文件中,除了常见的 select、insert、update、delete 标签之外,还有哪些标签?

Dao 接口工作的原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?

最佳实践中,通常一个 xml 映射文件,就会写一个 Dao 接口与之对应。Dao 接口就是人们常说的 Mapper 接口,接口的全限名,就是映射文件中 namespace 的值;接口的方法名,就是映射文件中 MappedStatement 的 id 值;接口方法内的参数,就是传递给 sql 的参数。

* 全限名

Dao 接口里的方法可以重载,但是 Mybatis 的 xml 里面的 ID 不允许重复。

这里使用了动态 sql 进行实现方法重载。

补充:Dao 接口方法可以重载,但是需要满足以下条件

1、仅有一个无参方法和一个有参方法

2、多个有参方法时,参数数量必须一致。且使用相同的 @Param

Mybatis 是如何进行分页的?分页插件的原理是什么?

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

Mybatis 执行批量插入,能返回数据库主键列表吗?

可以

JDBC 都可以,Mybatis 当然也可以。

Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理吗?

Mybatis 动态 sql 可以让我们在 xml 映射文件中,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。

执行原理:使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql,以此来完成动态 sql 的功能。

Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?

1、使用 resultMap 标签,逐一定义列明和对象属性名之间的映射关系。

2、使用 sql 列的别名功能,将列别名书写为对象属性名⽐如 T_NAME AS NAME,对象属性名⼀般是 name,⼩写,但是列名不区分⼤⼩写,MyBatis 会忽略列名⼤⼩写,智能找到与之对应对象属性 名,你甚⾄可以写成 T_NAME AS NaMeMyBatis ⼀样可以正常⼯作。

有了列明和属性名之间的映射,Mybatis 通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,找不到映射关系的属性是无法完成赋值的。

Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别。

Mybatis 可以执行一对一、一对多、多对多、多对一的关联查询。

* 关联查询:是指在关系型数据库中,通过将多个表的数据关联起来,来获取所需的信息。

一对一

<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <association property="address" column="address_id" select="com.example.mapper.AddressMapper.selectAddressById"/>
</resultMap>

一对多 

<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <collection property="orders" ofType="Order" column="user_id" select="com.example.mapper.OrderMapper.selectOrdersByUserId"/>
</resultMap>

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

Mybatis 的 xml 映射文件中,不同的 xml 映射文件,id是否可以重复?

Mybatis 中如何执行批处理?

使用 BatchExecutor 完成批处理

Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?

有三种基本的 Executor 执行器:

作用范围:Executor 的这些特点,都严格限制在 SqlSession 生命周期范围内。

Mybatis 如何指定使用哪一种 Executor 执行器?

Mybatis 是否可以映射 Enum 枚举类?

Mybatis映射⽂件中,如果 A 标签通过 include 引⽤了 B 标签的内容,请问,B 标签能否定义在 A 标签的后⾯,还是说必须定义在 A 标签的前⾯?

简述 Mybatis 的 xml 映射文件和 Mybatis 内部数据结构之间的映射关系?

为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

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

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

相关文章

labelImg使用

创建一个名字为data的文件夹&#xff0c;里面images文件夹存放图片&#xff1b;labels存放标注的标签文件&#xff1b;最后创建一个名为 classes.txt 的txt文件来存放所要标注的类别名称。 终端输入&#xff1a; labelImg images classes.txt images 存储图像的文件夹 classe…

【一文详解】内外网文件摆渡系统,解决网间数据安全传输问题

一、内外网文件摆渡系统的背景 数字化转型进一步推动了数据的移动&#xff0c;而随着攻击者加速利用日常生活中的数据依赖性&#xff0c;数据泄露也随之扩大。企业为保护网络安全和数据安全&#xff0c;使用网络隔离手段进行网络隔离&#xff0c;如银行内部将网络隔离为生产网…

基于FFMPEG读取摄像头图像编码为h264

1.调用ffmpeg命令采集摄像头图像 $ ffmpeg -f v4l2 -framerate 30 -video_size 1280*720 -i /dev/video0 -c:v libx264 -preset veryfast -f h264 output.h264-f v4l2: 指定输入设备采用Video4Linux2框架。   -framerate 30: 设置帧率为30。   -video_size 1280720: 设置视…

Shell 脚本入门指南

Shell 脚本入门指南 引言1.1 什么是 Shell 脚本&#xff1f;1.2 为什么学习 Shell 脚本&#xff1f; 准备工作2.1 选择和安装 Shell&#xff08;Bash&#xff09;2.2 设置脚本编辑环境&#xff08;文本编辑器&#xff09; Hello World&#xff01;基本语法4.1 变量4.2 条件判断…

【OpenCV】离散傅里叶变换

离散傅里叶变换 傅里叶变换代码实现扩展图片创建储存实部和虚部值的矩阵进行离散傅里叶变换将复数转换成振幅对数转换裁剪和重排归一化 离散傅里叶变换在图像处理中的应用参考 傅里叶变换 在图片处理中&#xff0c;傅里叶变化会将对图片的时域分析转变为频域分析。 傅里叶的基…

模型 麦肯锡七步成诗法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。问题到解决方案的七步跨越。 1 麦肯锡七步成诗法的应用 1.1零售业客户体验转型实践 随着消费者对购物体验的要求日益提高&#xff0c;一家零售企业面临客户流失和销售增长放缓的问题。企业管理层决定…

分类预测|基于哈里斯鹰优化混合核极限学习机的数据分类预测Matlab程序HHO-HKELM多特征输入多类别输出含基础程序

分类预测|基于哈里斯鹰优化混合核极限学习机的数据分类预测Matlab程序HHO-HKELM多特征输入多类别输出含基础程序 文章目录 前言分类预测|基于哈里斯鹰优化混合核极限学习机的数据分类预测Matlab程序HHO-HKELM多特征输入多类别输出含基础程序 一、HHO-HKELM模型HHO-HKELM 分类预…

告别PDF格式困扰,2024年PDF转换器推荐

PDF现在已经逐渐成为了文件传输的主流格式了&#xff0c;它有保存文件页面版式的优点&#xff0c;但是这个格式编辑对大部分人来说还是不那么方便&#xff0c;日常我们还是习惯将它们转换成我们常见的 文本格式来操作。今天我分享一下可以实现PDF格式转换的pdf转换器有哪些吧。…

CSS3实现购物车动画效果

概述 小程序商城或者 web 端网站时,我们可以只通过 CSS 的 animation 和transform,而不需要借助额外的第三方库轻松实现简单的动画效果,丰富页面的表达效果 效果 如下图所示,点击按钮就会有个商品进入左下角的购物车内 购物车动画示例地址 代码示例 元素 开始只需要写…

Uniapp 调用aar、jar包

废话 坑是真的多&#xff0c;官方文档简陋到可以忽略不计。 大概流程 1. 新建一个Android模块&#xff0c;需要用这个模块打包成aar 2. 用这个模块引用uniapp-v8-release.aar以及你需要用到的aar、jar&#xff0c;用不到则忽略这步 坑一&#xff1a;不要直接放到这个模块的…

window11彻底关闭Microsoft Defender

Microsoft Defender Antivirus 是 Microsoft Windows 11 操作系统的默认防病毒解决方案。默认情况下它处于打开的状态。大多数第三方的杀毒软件都可以识别&#xff0c;并代替它。 但是大多数情况下&#xff0c;我们总是有各种理由需要关闭它&#xff0c;例如 Windows Defender …

轻量级冠军:NVIDIA 发布具有领先准确率的小语言模型

Mistral-NeMo-Minitron 8B 是最近发布的 Mistral NeMo 12B 模型的微型版本&#xff0c;具有高精度和高计算效率&#xff0c;可在 GPU 加速数据中心、云和工作站上运行模型。 生成式 AI 开发者通常需要在模型尺寸和准确性之间做出权衡。然而&#xff0c;NVIDIA 发布的一款新语言…

内存管理篇-14kmalloc机制实现分析

引入这个kmalloc的目的&#xff0c;是因为前面的slab接口太过于复杂&#xff0c;因此需要一个全新的封装kmalloc接口&#xff0c;内存申请编程接口实现。kmalloc底层起始也是基于slab缓存实现的。 1.kmalloc 调用流程 参数解析: 解析 gfp_mask 参数&#xff0c;确定分配时是否…

数据结构与算法学习day18-层序遍历

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。…

硬盘崩溃数据无踪?Windows数据恢复TOP4揭秘,2024年助你找回宝贵资料

现在我们的生活、工作、学习都离不开电脑&#xff0c;电脑里的硬盘就像个装满宝贝的箱子&#xff0c;里面全是我们宝贵的照片、文档、视频和美好回忆。但要是硬盘突然坏了&#xff0c;东西一下子全没了&#xff0c;那感觉真是太糟糕了。别担心&#xff0c;今天我们就给你介绍几…

2024年中国运筹学会运筹竞赛(数据驱动赛道)报名通知

竞赛组织 主办单位&#xff1a;中国运筹学会&#xff08;国家一级学会&#xff09; 承办单位&#xff1a;中国科学技术大学 支持单位&#xff1a;杉数科技、海康威视、中国科学技术大学管理学院、《运筹学学报》杂志 竞赛内容 本次竞赛&#xff08;本科生组&#xff09;由竞…

不平衡数据集的单类分类算法

不平衡数据集的单类分类算法 异常值或异常是与其他数据不符的罕见例子。 识别数据中的离群值称为离群值或异常检测&#xff0c;机器学习中专注于此问题的子领域称为单类分类。这些是无监督学习算法&#xff0c;旨在对“正常”示例进行建模&#xff0c;以便将新示例分类为正常…

记录一次给iOS 工程添加.gitignore文件

新建了一个iOS工程&#xff0c;修改过代码之后&#xff0c;提交发现有一些自己不想要提交的内容 如下图&#xff0c;里面有.DS_Store文件&#xff0c;还有xcsuserstate文件&#xff0c; 这个时候需要添加忽略文件 首先在工程文件夹中执行 touch .gitignore 创建忽略文件&#…

Unity2D游戏开发-Pak木鱼

在接下来文章里我会以Unity为主一起制作游戏 在unity 里如何制作一个简单的敲木鱼游戏&#xff1f; 创建一个2D场景&#xff08;本人使用Unity2023&#xff09; (每个一段时间要申请一个个人许可证) 点击下方蓝色按钮创建 将以下素材拖动到Assets文件夹中 这张图随意命名我…

Swift concurrency 4 — Task和.task的理解与使用

Task Swift中的Task是一种异步操作&#xff0c;它提供了一种替代DispatchQueue.main.async{}等传统方法的方法。通过使用Task&#xff0c;我们可以简化代码并更好地控制异步操作。此外&#xff0c;Task还提供了其他选项&#xff0c;可以进一步增强任务执行。 先看一个Task的基…