做外贸学习网站,苏州住建网站,怎么seo网站排名,asp.net企业网站模板系列文章目录
高级Mybatis#xff0c;一些结果映射#xff0c;引入新的注解 目录 系列文章目录 文章目录 一、结果映射 1.ResultType 2.ResultMap 基础应用#xff1a; 二、一对一 嵌套结果和嵌套查询 嵌套结果 嵌套查询 区别 三、一对多 四、多对多 五、注解补充 1.一对一…系列文章目录
高级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 propertycategory resultMapCategoryResult/
嵌套查询
例 association propertycategory columncategory_id selectnamespace名.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.二级缓存的使用