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

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

 


http://www.kler.cn/a/369276.html

相关文章:

  • RabbitMq-队列交换机绑定关系优化为枚举注册
  • OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR
  • cmake命令使用
  • 浅析Android中View绘制中的渲染机制
  • AIGC中的图像生成:基于GAN的实现
  • Python实现Android设备录屏功能及停止录屏功能
  • Android13、14特殊权限-应用安装权限适配
  • Django-中间件(切面编程AOP)
  • 设计模式(二)
  • cjson内存泄漏问题注意事项
  • 股市投资有哪些实用心得?
  • Spring + SSE
  • C++学习路线(二十五)
  • 【MyBatis面试题】
  • GPU 与 GPU 服务器:科技璀璨之星,开启无限未来
  • 3分钟彻底搞懂Web UI自动化测试之【POM设计模式】
  • 雷池社区版中升级雷池遇到问题
  • 开发维护初学者指南——软件维护
  • 计算机网络:数据链路层 —— 无线局域网 WLAN
  • Android——convertView
  • Thinkphp-Laravel大学生心理健康管理系统的设计与实现zw779
  • vscode 插件推荐安装
  • 科技狂潮下的新蓝海:元宇宙将如何重塑我们的世界?
  • 【机器学习基础】激活函数
  • 项目简介——基于GD32+FreeRTOS+LVGL的智能通用控制Demo
  • 【知识科普】今天聊聊前端打包工具webpack