全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页

高级结果映射专题测试

15 题 45 分钟 难度:

考察知识点

  • 一对一关联映射(<association> 元素,嵌套查询 vs 嵌套结果映射)
  • 一对多集合映射(<collection> 元素,ofType 属性,集合初始化)
  • 多对多关联查询(中间表设计,多层级集合嵌套,columnPrefix
  • <discriminator> 鉴别器(动态结果映射,多态数据映射)
  • 嵌套查询与 N+1 问题(N+1 问题本质,解决方案)
  • 延迟加载配置(lazyLoadingEnabledlazyLoadTriggerfetchType
1
单选题

在 MyBatis 中,<discriminator> 元素用于根据查询结果中某列的值动态决定使用哪个 <resultMap>。以下关于 <discriminator> 的描述,哪一项是错误的?

A

<discriminator> 必须指定 columnjavaType 属性

B

<case> 元素的 value 属性用于匹配列的具体值

C

<discriminator> 内部可以嵌套多个 <case> 和一个默认的 <resultMap> 引用

D

<discriminator> 只能在 <select> 标签内部使用,不能与 <resultMap> 配合

2
单选题

在 MyBatis 中实现一对一关联映射时,以下哪种方式不适合用于关联查询?

A

使用 <association> 嵌套查询(select 属性)

B

使用 <association> 嵌套结果映射(resultMap 属性)

C

使用 <collection> 嵌套结果映射

D

在 SQL 中使用 JOIN 语句配合 <association> 的 resultMap 属性

3
多选题

在 MyBatis 中实现一对多集合映射时,以下哪些说法是正确的?

A

使用 <collection> 元素映射集合属性

B

ofType 属性用于指定集合中元素的类型

C

使用嵌套查询时,column 属性只能传递单个列值

D

使用嵌套结果映射时,需要通过列别名避免不同表同名列的冲突

E

集合属性在 Java 对象中必须初始化为空集合,否则会抛出 NPE

4
简答题

在 MyBatis 中实现多对多关联查询(如:用户-角色,通过用户角色关联表),请描述:

  1. 数据库表结构应该如何设计?
  2. 使用嵌套结果映射时,SQL 语句应如何编写?
  3. 如何在 resultMap 中配置多层级的集合嵌套?
5
判断题

在 MyBatis 中使用嵌套查询(select 属性)进行关联查询时,如果查询 10 个用户,每个用户关联 1 个部门,则总共会执行 11 次 SQL 查询。这种说法是否正确?

A

B

6
填空题

在 MyBatis 的全局配置中,启用延迟加载需要设置两个关键参数:

  1. 开启延迟加载的开关:!!1_!!
  2. 配置按需加载(即访问任意属性都触发延迟加载):!!2_!!
7
多选题

关于 MyBatis 中 <discriminator> 鉴别器的使用,以下哪些说法是正确的?

A

<discriminator>javaType 属性可以是 int、String 等 Java 类型

B

<case> 元素可以同时指定 resultMap 和内部的 <result> 映射

C

<discriminator> 必须放在 <select> 标签内部

D

<case> 没有匹配时,可以使用默认的映射规则继续映射

E

column 属性指定用于判断的列名,可以使用列别名

8
填空题

MyBatis 中一对一关联映射的两种主要方式:

  1. 嵌套查询:通过 !!1_!! 属性引用另一个 select 语句进行关联查询
  2. 嵌套结果映射:通过 !!2_!! 属性引用另一个 resultMap 进行 JOIN 结果映射
9
简答题

在 MyBatis 中实现一对多集合映射时,使用嵌套查询和嵌套结果映射各有什么优缺点?在什么场景下应该选择哪种方案?

10
单选题

以下哪种方式不能有效解决 MyBatis 中的 N+1 查询问题?

A

使用嵌套结果映射配合 SQL JOIN 查询

B

在 collection/association 中设置 fetchType="lazy" 启用延迟加载

C

在主查询中通过 LEFT JOIN 预先关联查询所有数据

D

使用 MyBatis Plus 的 @TableField(select = false) 注解

11
多选题

关于 MyBatis 延迟加载的配置和行为,以下哪些说法是正确的?

A

全局开启延迟加载后,所有关联查询默认都会延迟加载

B

通过 fetchType 属性可以单独控制某个关联的加载策略,覆盖全局设置

C

延迟加载的对象在序列化时会自动触发加载,不会出现问题

D

延迟加载的 SQL 会在访问关联属性时触发执行

E

使用 lazyLoadTrigger 设置为 false 时,只有访问延迟属性本身才会触发加载

12
判断题

在 MyBatis 中实现多对多关联查询时,必须通过中间表(关联表)将多对多关系拆分为两个一对多关系,这种说法是否正确?

A

B

13
简答题

MyBatis 中的 <discriminator> 鉴别器与 Java 中的 switch-case 语句有相似之处。请回答:

  1. <discriminator> 的主要作用是什么?
  2. 在实际项目中,什么业务场景适合使用鉴别器?
  3. <case> 没有匹配时,映射行为是怎样的?
14
多选题

在实际项目中,以下哪些策略可以有效缓解或解决 MyBatis 的 N+1 查询问题?

A

将嵌套查询改为嵌套结果映射,使用 SQL JOIN 一次性获取数据

B

开启延迟加载,只在真正需要关联数据时才执行查询

C

使用 @BatchSize 注解批量加载关联数据,将多次查询合并为少量批次

D

在主查询中使用子查询预先加载关联数据的 ID,减少后续查询数量

E

通过缓存(如 Redis)缓存关联查询结果,减少数据库访问次数

15
简答题

在电商系统中,用户(User)和用户详情(UserProfile)是一对一关系。请设计 MyBatis 的映射方案,并说明:

  1. 数据库表结构如何设计?
  2. 如何使用嵌套结果映射实现 JOIN 查询?
  3. 如果需要分别查询用户和用户详情,应如何设计 Mapper?
← 上一个试卷 高级映射与复杂场景专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库