全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 9 道配套习题

注解开发专题

专题说明

本专题精选9道代表性题目,系统讲解MyBatis的注解开发方式,涵盖@Select/@Insert/@Update/@Delete基础CRUD注解、@Results结果映射、@One/@Many关联查询、@SelectProvider/@UpdateProvider动态SQL提供者等核心内容,适合偏好代码内联、减少XML配置的开发场景。

学习目标

  1. 掌握基础CRUD注解的使用方法与属性配置
  2. 熟练使用@Results进行结果映射
  3. 掌握@One和@Many实现一对一和一对多关联查询
  4. 理解嵌套查询与嵌套结果映射的区别
  5. 掌握@SelectProvider等SQL Provider构建动态SQL
  6. 了解注解开发与XML开发的优缺点与适用场景

学习内容

本专题涵盖以下2个知识点:

知识点题目数核心内容
注解基础4题@Select/@Insert、@Results、@Param、基础关联
注解进阶5题@One/@Many嵌套查询、@SelectProvider、N+1问题、综合应用

学习建议

  • 先阅读完整指南文章,理解注解开发的整体设计
  • 重点掌握@One/@Many的使用,理解嵌套查询与嵌套结果映射的区别
  • 注意fetchType属性对加载策略的影响
  • @SelectProvider适合中等复杂度的动态SQL,过于复杂的SQL仍建议用XML
  • 理解N+1问题的产生原因与避免方案

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

📝 配套习题(9 题)

1
多选题

关于 MyBatis 注解开发中 @One 和 @Many 的使用,以下说法正确的有?

A

@One 用于一对一关联查询,@Many 用于一对多关联查询,两者底层都是通过嵌套查询实现的

B

@One 和 @Many 注解的 select 属性用于指定执行嵌套查询的 Mapper 方法(全限定方法名)

C

fetchType 属性可设置为 FetchType.LAZY 实现延迟加载,设置为 FetchType.EAGER 实现立即加载

D

当使用 @Many 时,返回类型必须是 List,不能使用其他集合类型

2
填空题

在 MyBatis 注解开发中,@One 和 @Many 注解通过 _________ 属性控制加载策略(LAZY/EAGER)。当使用 ______ 属性传递多个参数给嵌套查询时,语法为 {property1=column1, property2=column2}。为避免 N+1 查询问题,推荐使用 JOIN SQL 配合嵌套 ________ 结果映射替代嵌套查询。

3
填空题

在 MyBatis 注解开发中,@One 和 @Many 注解通过 ______ 属性指定嵌套查询的 Mapper 方法。如果需要通过 column 属性传递多个参数给嵌套查询,可以使用 ____________ 区分同名字段,或使用 {________________________} 语法传递多列参数。

4
单选题

关于 @SelectProvider 注解的使用,以下哪个说法是错误的?

A

@SelectProvider 注解的 type 属性指定一个类,该类包含返回 SQL 字符串的方法

B

@SelectProvider 注解的 method 属性指定 type 类中的方法名,该方法必须返回 String 类型的 SQL

C

@SelectProvider 对应的方法可以接收任意数量的参数,参数会与方法签名中的参数按顺序匹配

D

推荐使用 org.apache.ibatis.jdbc.SQL 工具类来拼接动态 SQL,以避免 SQL 注入和语法错误

5
多选题

关于 MyBatis 注解动态 SQL 的 Provider 注解族,以下说法正确的有?

A

@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider 分别用于提供动态 SQL 的查询、插入、更新、删除操作

B

Provider 方法只能返回一条完整的 SQL 字符串,不能根据条件动态拼接不同的 SQL 片段

C

在 Provider 方法中可以使用 org.apache.ibatis.jdbc.SQL 类提供的 SELECT()、FROM()、WHERE() 等方法来构建动态 SQL

D

@SelectProvider 对应的方法参数可以是 Mapper 方法参数的 Map 映射,通过 @Param 注解的参数名作为 Map 的 key

6
填空题

在 MyBatis 中,使用 @SelectProvider 构建动态 SQL 时,推荐使用 ________________________ 工具类。该类支持链式调用,通过 ______ 指定查询列,______ 指定表名,______ 添加条件,最后通过 ________ 方法返回完整的 SQL 字符串。

7
多选题

关于 @Results 注解在 MyBatis 注解开发中的高级使用,以下说法正确的有?

A

@Results 的 id 属性可以给结果映射命名,其他方法通过 @ResultMap 注解引用该 id 实现复用

B

@Result 注解的 column 属性必须与数据库列名完全一致才能正确映射

C

当 Java 属性名与数据库列名一致时,可以不配置 @Results,MyBatis 会自动映射

D

@Result 中可以嵌套 @One 或 @Many 实现关联查询,也可以嵌套 @Results 实现 JOIN 查询的嵌套结果映射

8
多选题

关于 MyBatis 中 @Select、@Insert、@Update、@Delete 四个基础注解的使用,以下说法正确的有?

A

这四个注解可以直接标注在 Mapper 接口的方法上,替代 XML 中的对应 SQL 标签

B

@Insert 注解支持 useGeneratedKeys 和 keyProperty 属性,用于获取自增主键值

C

@Update 和 @Delete 注解可以返回 int 类型,表示受影响的行数

D

注解方式的 SQL 中可以使用 <if>、<foreach> 等 XML 动态 SQL 标签

9
多选题

在 MyBatis 注解开发中,关于 @Results、@One、@Many 的组合使用,以下说法正确的有?

A

可以在 @Results 中同时配置 @One 和 @Many,分别处理一对一和一对多关联

B

@One 和 @Many 的 column 属性可以引用主查询返回的多个列,用于嵌套查询的参数传递

C

嵌套的 @Results 可以在 @One 或 @Many 内部再次定义结果映射,适用于 JOIN 查询的场景

D

使用 @Results + @One/@Many 实现嵌套关联时,所有的关联查询都必须在同一条 SQL 语句中完成

← 上一个专题 核心配置文件专题
下一个专题 → 源码架构与核心原理专题

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

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

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

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