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

相关推荐
ln-x1 小时前
在IDEA中运行Mybatis后发现取出的password值为null
java·intellij-idea·mybatis
ZWZhangYu3 小时前
【MyBatis源码】SqlSource对象创建流程
java·tomcat·mybatis
爱上语文4 小时前
苍穹外卖 添加购物车接口
java·数据库·spring boot·后端·mybatis
斗-匕16 小时前
MyBatis常见面试题总结
java·开发语言·mybatis
天上掉下来个程小白1 天前
Mybatis-14.XML映射文件
xml·java·mybatis
二十雨辰1 天前
[瑞吉外卖]-09数据库优化
java·mybatis
毕业设计制作和分享1 天前
ssm基于vue框架和elementui组件的手机官网+vue
java·前端·vue.js·spring boot·elementui·mybatis·1024程序员节
码蜂窝编程官方1 天前
【含开题报告+文档+PPT+源码】基于SSM的旅游与自然保护平台开发与实现
java·vue.js·intellij-idea·mybatis·旅游
涛涛6号2 天前
映射问题的解决办法(mybaitis)
java·windows·mybatis