Mybatis高级

embedded/2024/11/3 4:22:18/

系列文章目录

高级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.二级缓存的使用 

 


http://www.ppmy.cn/embedded/133254.html

相关文章

JavaScript(操作元素属性:样式style,className,classList,表单元素,自定义属性,间歇函数)注册用户协议同意倒计时

操作元素属性 操作元素常用属性 通过 JS 设置/修改标签元素属性&#xff0c;比如通过 src更换 图片最常见的属性比如&#xff1a; href、title、src 等语法&#xff1a; 对象名.属性值 操作元素样式属性 JS 设置/修改标签元素的样式属性。 比如通过 轮播图小圆点自动更换…

Spring Boot技术栈在论坛网站开发中的应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

运营的底层逻辑是什么?

运营的底层逻辑涉及对产品或服务的整个生命周期进行管理&#xff0c;以实现用户增长、活跃度提升、收入增加和品牌价值提升等目标。以下是运营的一些核心逻辑&#xff1a; 1. 用户中心&#xff1a;始终将用户需求和体验放在首位&#xff0c;以用户为中心设计和优化产品。 2. …

Flutter图片控件(七)

1、加载图片 import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: MyHomePage(),)); }class MyHomePage extends StatelessWidget {const MyHomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(appBar: AppB…

appium+mumu模拟器 嚼碎菜鸟教程

1、android sdk 下载安装 下载地址&#xff1a;https://www.androiddevtools.cn/index.html# 选择版本&#xff1a;android sdk【sdk tools:installer_r24.4.1-windows.exe】 参考步骤&#xff1a;https://blog.csdn.net/2401_83004375/article/details/139300339 2、jdk 安装…

导出BERT句子模型为ONNX并推理

在深度学习中&#xff0c;将模型导出为ONNX&#xff08;Open Neural Network Exchange&#xff09;格式并利用ONNX进行推理是提高推理速度和模型兼容性的一种常见做法。本文将介绍如何将BERT句子模型导出为ONNX格式&#xff0c;并使用ONNX Runtime进行推理&#xff0c;具体以中…

k8s可以部署私有云吗?私有云部署全攻略

k8s可以部署私有云吗&#xff1f;K8S可以部署私有云。Kubernetes是一个开源的容器编排引擎&#xff0c;能够自动化容器的部署、扩展和管理&#xff0c;使得应用可以在各种环境中高效运行。通过使用Kubernetes&#xff0c;企业可以在自己的数据中心或私有云环境中搭建和管理容器…

大语言模型驱动的跨域属性级情感分析——论文阅读笔记

前言 论文PDF下载地址&#xff1a;7156 最近想搜一下基于大语言模型的情感分析论文&#xff0c;搜到了这篇在今年发表的论文&#xff0c;于是简单阅读之后在这里记一下笔记。 如图1所示&#xff0c;在餐厅领域中的"快"是上菜快&#xff0c;属于正面情感&#xff0c;但…