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

Mybatis高级

系列文章目录

高级Mybatis,一些结果映射,引入新的注解

目录

系列文章目录

文章目录

一、结果映射

1.ResultType

2.ResultMap

基础应用:

二、一对一

嵌套结果和嵌套查询

嵌套结果

嵌套查询

区别

三、一对多

四、多对多

五、注解补充

1.一对一

2.一对多

六、缓存

1.一级缓存

2.缓存失效 

3.二级缓存

4.二级缓存的使用 

一、结果映射

1.ResultType

如果数据库中列名跟Java实体类中的属性名一模一样,则可以使用resultType 进行类型自动映射。

注意:使用resultType进行属性与字段映射,必须保证两者同名,名字不相 同,则无法完成映射

2.ResultMap

resultMap是提前定义好的一个映射规则,实现了查询列到类属性的映射。实 际开发中,我们在映射文件中,先定义出结果集映射resultMap,然后在select 语句上引用这个resultMap,最终完成结果映射。

基础应用:

<resultMap> 详解:

属性 id ,其值唯一,用来标识该resultMap

属性 type ,其值为实体类的全包名,用来指定映射对象的类型

属性 extends ,继承

子标签 <result> ,用来将查询的数据中一个指定类列的值映射到对象指 定的属性中

子标签 <id> ,和 <result> 标签功能相同,但是 <id> 用来映射的是表中 的主键

二、一对一

在MyBatis中,一对一关系映射是指两个实体之间的关系。在这种关系中,通 常有一个"主"表和一个"从"表。主表中的每一行都具有唯一标识符,并且在从 表中通过外键与主表相关联

嵌套结果和嵌套查询

嵌套结果( Nested Results :这种方式适用于主表和从表之间的关联字段
不是主键。
在映射文件中,先编写一个查询语句联合查询主表和从表,并使用 MyBatis
resultMap 指定结果集的映射关系。在 resultMap 中,使用嵌套的
<association> 标签将从表映射到主表的字段上。
嵌套查询( Nested Select :这种方式适用于主表和从表之间的关联字段
是主键。
在映射文件中,通过编写两个独立的 SQL 语句分别查询主表和从表的数
据,然后通过在主表查询结果上进行循环,并在循环中执行从表的查询,
将从表的数据映射到主表的对应对象中

 

嵌套结果

例如<association property="category" resultMap="CategoryResult"/>

嵌套查询

例: <association property="category" column="category_id" select="namespace名.findById3"/>

区别

嵌套结果映射通过多个 resultMap 组合实现每个属性值的映射 嵌套结果查询是在 SQL 中实现多表联查,且通常情况下需要执行多个 SQL 语句,并将结果拼接到一个对象中 在数据量较大的情况下,嵌套结果映射相对来说性能更高,但是查询时需 要考虑 SQL 的效率和维护成本。

三、一对多

如果查询的类别是一级分类,则其需要包含所有的子类别(二级分类)

如果查询的类别是二级分类,则其包含的子类别为null

一对多和一对一映射(含嵌套结果、嵌套查询),实现思路是类似的,,只是把association标签变为了collection标签

四、多对多

实际项目开发中,具有的多对多关系的实体,在具体业务实现时,可以简化为 一对多的关系。

多对多就是需要一张桥表,然后在此基础上转换为一对多进行处理

五、注解补充

1.一对一

MyBatis提供了 @One 注解来使用嵌套select语句加载一对一关联查询数据。

@Result(column = "addr_id",property = "address",

one = @One(select = "com.briup.demo05.mapper.StudentMapper.findAddressById")) }

2.一对多

MyBatis提供了 @Many 注解,用来使用嵌套Select语句加载一对多关联查询。

@Result(property = "courses", column = "id",

many = @Many(select ="com.briup.demo05.mapper.TutorMapper.findCoursesByTutorId")) }

六、缓存

缓存是一种临时存储数据的技术,用于提高数据访问的速度和性能。

MyBatis提供了缓存机制来提高数据库访问的性能。它的缓存是位于应用程序和 数据库之间的一层缓存。当应用程序查询数据时,MyBatis会先检查缓存中是否 有相应的结果。如果有,就直接从缓存中返回结果,而不需要再次访问数据 库,从而提高查询性能。

MyBatis的缓存分为两级:一级缓存和二级缓存。

1.一级缓存

默认情况下,MyBatis的一级缓存是开启的,也可以通过配置文件进行关闭

一级缓存是SqlSession级别的 ,通过同一个sqlSession查询的数据会被缓 存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问。

2.缓存失效 

缓存失效的情况1: 同一个sqlSession但是查询条件不同

缓存失效的情况2: 不同的sqlSession对应不同的一级缓存

缓存失效的情况3: 同一个sqlSession两次查询期间执行了任何一次增删改操 作

缓存失效的情况4: 同一个sqlSession两次查询期间手动清空了缓存,调用sqlSession.clearCache();方法等,调用commit()、close()方法也会清空一级缓存。

3.二级缓存

MyBatis的二级缓存是一种在 Mapper级别 上操作的缓存机制。它旨在跨多个会 话缓存数据,通过减少数据库查询次数来提高应用程序的性能。

4.二级缓存的使用 

 

相关文章:

Mybatis高级

系列文章目录 高级Mybatis&#xff0c;一些结果映射&#xff0c;引入新的注解 目录 系列文章目录 文章目录 一、结果映射 1.ResultType 2.ResultMap 基础应用&#xff1a; 二、一对一 嵌套结果和嵌套查询 嵌套结果 嵌套查询 区别 三、一对多 四、多对多 五、注解补充 1.一对一…...

【spark】spark structrued streaming读写kafka 使用kerberos认证

spark版本:2.4.0 官网 Spark --files使用总结 Spark --files理解 一、编写jar import org.apache.kafka.clients.CommonClientConfigs import org.apache.kafka.common.config.SaslConfigs import org.apache.spark.sql.SparkSession import org.apache.spark.sql.streaming.T…...

【脚本】B站视频AB复读

控制台输入如下代码&#xff0c;回车 const video document.getElementsByTagName("video")[0];//获取bpx-player-control-bottom-center容器,更改其布局方式const div document.getElementsByClassName("bpx-player-control-bottom-center")[0];div.sty…...

leetcode - 257. 二叉树的所有路径

257. 二叉树的所有路径 题目 解决 做法一&#xff1a;深度优先搜索 回溯 深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种搜索方式会尽可能深地探索每个分支&#xff0c;直到无法继续深入为止&#xff0c;然后回溯到上…...

python 相关

python 1. pip 安装某个版本范围的软件 pip install “elasticsearch>6,<7” pip install elasticsearchX.Y.Z 2. pip 查看包版本 pip show pandas 3. pip 下载whl包 https://tendcode.com/subject/article/pip-offline-download/ (更多平台与架构)pip downl…...

静态分析2:控制流分析(构建CFG)

参考&#xff1a;南京大学《软件分析》课程2 1、控制流分析 控制流分析实际上指的是构建控制流图&#xff08;Control Flow Graph&#xff0c;CFG&#xff09;CFG是静态分析的基础数据结构CFG的节点可以是单个指令、基本块&#xff08;Basic Block&#xff0c;BB&#xff09;…...

Linux 应用领域

目录 服务器领域 桌面环境 软件开发 数据分析与科学计算 嵌入式系统 虚拟化和云计算 人工智能与机器学习 物联网&#xff08;IoT&#xff09; 网络安全 服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性&#xf…...

FPM383C指纹模块超详解 附驱动

0. 本人使用环境介绍 0.1 硬件环境 ESP32-C3FPM383C指纹模块一根破旧的usb数据线 0.2 软件环境 Clion2024.2.2ESP-IDF5.3.1Clion插件ESP-IDF 1. 硬件接口说明 1.1 UART UART 缺省波特率为 57.6Kbps&#xff0c;数据格式&#xff1a;8 位数据位&#xff0c;2 位停止位&am…...

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…...

.rmallox勒索病毒肆虐:如何有效防范与应对

引言 在当今这个数字化时代&#xff0c;网络安全已成为一个不可忽视的重要议题。随着信息技术的飞速发展&#xff0c;网络空间的安全威胁也日益复杂多变。病毒、木马、勒索软件等恶意程序层出不穷&#xff0c;比如.rmallox勒索病毒。它们利用先进的技术手段&#xff0c;如代码…...

人工智能能否影响未来生活:一场深刻的社会与技术变革

随着人工智能技术的不断发展&#xff0c;我们已经目睹了它在各行各业掀起的巨大变革浪潮。从医疗行业的病例诊断、药物研发&#xff0c;到企业运营的数据分析、智能决策&#xff0c;再到日常生活中的智能语音助手、自动驾驶汽车、智能家居&#xff0c;人工智能正以前所未有的速…...

cmu 15-445学习笔记-3 存储引擎

03 Database Storage-Part Ⅰ 数据库存储上半部分 数据库分层划分结构图&#xff1a; Disk Manager&#xff1a;存储引擎&#xff0c;管理磁盘上的文件Bufferpool Manager&#xff1a;管理内存的缓存池Access Methods&#xff1a;访问方法Operator Execution&#xff1a;执行…...

[linux]和windows间传输命令scp 执行WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误解决

[linux]和windows间传输命令scp 执行WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误解决. 现象&#xff1a; 原因&#xff1a; 接收方服务器系统做了某些更改&#xff0c;导致登录时会报错。主要因为接收方服务器对登录过它的主机都会把该主机登录标识证书记录下来&a…...

C++ | Leetcode C++题解之第518题零钱兑换II

题目&#xff1a; 题解&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {vector<int> dp(amount 1), valid(amount 1);dp[0] 1;valid[0] 1;for (int& coin : coins) {for (int i coin; i < amount; i) {valid[…...

高并发-负载均衡

负载均衡在微服务架构中是一个重要的组成部分&#xff0c;旨在优化资源利用、提高服务可用性和确保系统的高可扩展性。以下是对微服务中的负载均衡的详细介绍&#xff0c;包括其原理、类型、实现方式以及相关的技术。 一、负载均衡的原理 负载均衡的基本原理是将进入系统的请…...

Docker 常用命令全解析:提升对雷池社区版的使用经验

Docker 常用命令解析 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用及其依赖打包到一个可移植的容器中。以下是一些常用的 Docker 命令及其解析&#xff0c;帮助您更好地使用 Docker。 1. Docker 基础命令 查看 Docker 版本 docker --version查看 Docker 运行…...

基于 Postman 和 Elasticsearch 测试乐观锁的操作流程

鱼说&#xff0c;你看不到我眼中的泪&#xff0c;因为我在水中。水说&#xff0c;我能感觉到你的泪&#xff0c;因为你在我心中。 -村上春树 在分布式系统中&#xff0c;多个并发操作对同一资源的修改可能导致数据不一致。为了解决这种问题&#xff0c;Elasticsearch 提供了乐观…...

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程&#xff0c;参见如下链接&#xff1a;修改ppt注册表&#xff0c;导出高分辨率图片 Step2. 打开PPT&#xff0c;找到自己想要保存的图&#xff0c;选中图像&#xff0c;查看图像尺寸并记录 Step3. 重新新建一个PPT&#xff0c;并根据记录的图片…...

day01-ElasticStack+Kibana

ElasticStack-数据库 #官网https://www.elastic.co/cn/ #下载7.17版环境准备 主机名IP系统版本VMware版本elk110.0.0.91Ubuntu 22.04.417.5.1elk210.0.0.92Ubuntu 22.04.417.5.1elk310.0.0.93Ubuntu 22.04.417.5.1 单机部署ES 1.下载ES软件包&#xff0c;放到/usr/local下 […...

HTML 约束验证

HTML5引入了表单相关的一些新机制&#xff1a;它为<input>元素和约束验证增加了一些新的语义类型&#xff0c;使得客户端检查表单内容变得容易。基本上&#xff0c;通过设置一些新的属性&#xff0c;常用的约束条件可以无需 JavaScript 代码而检测到&#xff1b;对于更复…...

vue3项目开发一些必备的内容,该安装安装,该创建创建

重新整理了一下项目开发必备的一些操作&#xff0c;以后直接复制黏贴运行&#xff0c;随着项目开发&#xff0c;后期会陆续补充常用插件或组件等 如果你是还没有安装过的新人&#xff0c;建议从《通过安装Element UI/Plus来学习vue之如何创建项目、搭建vue脚手架、npm下载、封装…...

2D拓扑图

2D拓扑图主要指的是在二维平面上表示物体形状和关系的一种图形表示方法。 一、基本概念 2D网格拓扑结构&#xff1a;在二维平面上&#xff0c;由一系列的节点&#xff08;node&#xff09;和边&#xff08;edge&#xff09;组成。每个节点代表一个具体的位置或坐标点&#xf…...

大数据面试题整理——Hive

系列文章目录 大数据面试题专栏点击进入 文章目录 系列文章目录Hive 面试知识点全面解析一、函数相关&#xff08;一&#xff09;函数分类与特点&#xff08;二&#xff09;concat和concat_ws的区别 二、SQL 的书写和执行顺序&#xff08;一&#xff09;书写顺序&#xff08;二…...

Python实现图像(边缘)锐化:梯度锐化、Roberts 算子、Laplace算子、Sobel算子的详细方法

目录 Python实现图像&#xff08;边缘&#xff09;锐化&#xff1a;梯度锐化、Roberts算子、Laplace算子、Sobel算子的详细方法引言一、图像锐化的基本原理1.1 什么是图像锐化&#xff1f;1.2 边缘检测的基本概念 二、常用的图像锐化算法2.1 梯度锐化2.1.1 实现步骤 2.2 Robert…...

【电机控制】相电流重构——单电阻采样方案

【电机控制】相电流重构——单电阻采样方案 文章目录 [TOC](文章目录) 前言一、基于单电阻采样电流重构技术原理分析1.1 单电阻采样原理图1.2 基本电压矢量与电流采样关系 二、非观测区2.1 扇区过渡区2.2 低压调制区 三、非观测区补偿——移相法四、参考文献总结 前言 使用工具…...

#基础算法

1 差分练习 1 模板题 代码实现&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int num sc.nextInt();long[][] arr new long[n 2][m …...

如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?

在OA系统或者合同管理系统中&#xff0c;我们会经常遇到网页在线编辑Word文档形式的公文及合同的情况&#xff0c;并且需要上级对下级的公文进行批注等操作&#xff0c;或者不同部门的人需要签字审核&#xff0c;这就需要用到文档流转功能&#xff0c;如何用猿大师办公助手实现…...

Python中的列表是什么?它们有什么用途?

1、Python中的列表是什么&#xff1f;它们有什么用途&#xff1f; 在Python中&#xff0c;列表是一种有序的集合&#xff0c;可以包含不同类型的元素。列表可以存储一组值&#xff0c;并且可以方便地访问、修改和操作这些值。 列表的主要用途包括&#xff1a; 数据存储&…...

探索现代软件开发中的持续集成与持续交付(CI/CD)实践

探索现代软件开发中的持续集成与持续交付&#xff08;CI/CD&#xff09;实践 随着软件开发的飞速进步&#xff0c;现代开发团队已经从传统的开发模式向更加自动化和灵活的开发流程转变。持续集成&#xff08;CI&#xff09; 与 持续交付&#xff08;CD&#xff09; 成为当下主…...

React 前端框架开发入门案例

以下是一个使用 React 进行前端框架开发的入门案例&#xff0c;实现一个简单的待办事项列表应用。 一、准备工作 安装 Node.js&#xff1a;React 需要 Node.js 环境来运行。你可以从 Node.js 官方网站下载并安装适合你操作系统的版本。 创建项目目录&#xff1a;在你的电脑上…...

wordpress 安装 403/线上销售渠道有哪些

mysql max() 函数的需扫描where条件过滤后的所有行&#xff1a;在测试环境中重现&#xff1a;测试版本&#xff1a;Server version: 5.1.58-log MySQL Community Server (GPL)testtable表中的索引mysql> show index from testtable;-------------------------------…...

安徽合肥疫情最新情况/东莞seo

关于Liferay环境的配置&#xff0c;可以参考博客园中其他的文章&#xff0c;这里不再详细叙述。现在要在Liferay的基础上进行二次开发&#xff0c;正在学习中&#xff0c;为了在学习过程中留下足迹&#xff0c;现在通过此形式记录自己的学习笔记。 一、Liferay整体框架 由于目前…...

网站建设 开发/百度竞价登录

今天&#xff0c;有个哥们在网上买了块二手机械硬盘。回家装好系统发现启动贼慢&#xff0c;开机十几分钟。遂到交流群发问。经过一番诊断最终确定为硬盘坏道导致。哥们失望至极&#xff0c;准备打开京东购买一块全新固态。本来&#xff0c;作为一个沉默宝宝天天在群里采集话题…...

网站建设的维护与更新/宁波网站推广大全

应用场景我们开发的控制台应用&#xff0c;在运行阶段很有可能被用户CtrlC终止或是被用户直接关闭。如果我们不希望用户通过CtrlC终止我们的程序&#xff0c;就需要对CtrlC或关闭事件作处理。处理方法在.net平台下Console类有个CancelKeyPress事件可以处理CtrlC&#xff0c;不过…...

郑州做网站公司 汉狮网络专业/uc浏览器网页版入口

var testString:String "wo shi string"var utf8String (testString as NSString).UTF8String 转载于:https://www.cnblogs.com/MartinLi841538513/p/3825574.html...

小程序开发难度大吗/seo能从搜索引擎中获得更多的

bootstrap流行&#xff0c;随着自带的字体图标也火起来了。美丽的字体系统中没有。制作成字体文件&#xff0c;下载到本地。浏览美丽的网页哦。在项目中遇到有些IE8显示不了&#xff0c;原因是IE8下设置了禁止字体下载...