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

MyBatis 中级技能认证测试

20 题 70 分钟 难度:

考察知识点

  1. 动态 SQL - if/choose/trim/foreach 等动态 SQL 标签的正确使用与易错点
  2. 高级结果映射 - discriminator 鉴别器、延迟加载配置等高级映射技术
  3. 缓存机制 - 一级/二级缓存原理、缓存作用域、缓存刷新策略与配置
  4. TypeHandler 自定义类型处理器 - TypeHandler 接口方法、内置处理器、枚举类型处理
  5. 与 Spring 集成 - SqlSessionFactoryBean 配置、事务管理集成、声明式事务
  6. 插件机制 - 四大拦截对象、@Intercepts 注解、分页插件原理
  7. 批量操作与性能优化 - ExecutorType.BATCH、SQL 优化、索引失效避免
  8. 存储过程与高级查询 - statementType=CALLABLE、OUT 参数、游标结果处理
  9. 注解开发 - @One/@Many 关联查询、@SelectProvider 动态 SQL 构建
1
单选题

在 MyBatis 的动态 SQL 中,<trim> 标签用于自定义裁剪 SQL 片段。以下关于 <trim> 标签属性的描述,错误的是:

A

prefix 属性用于给裁剪后的内容添加前缀

B

prefixOverrides 属性用于去除内容开头匹配的指定字符串

C

suffixOverrides 属性用于去除内容结尾匹配的指定字符串

D

suffix 属性用于去除内容结尾的指定字符串

2
多选题

在 MyBatis 中,<where><set> 标签底层都可以用 <trim> 标签来实现。以下哪些 <trim> 配置可以分别等价于 <where><set> 标签的功能?

A

<trim prefix="WHERE" prefixOverrides="AND |OR "> 等价于 <where>

B

<trim prefix="SET" suffixOverrides=","> 等价于 <set>

C

<trim prefix="WHERE" suffixOverrides="AND |OR "> 等价于 <where>

D

<trim prefix="SET" prefixOverrides=","> 等价于 <set>

3
判断题

在 MyBatis 的 <if> 标签中,test 属性可以使用 OGNL 表达式进行条件判断,判断字符串相等时需要使用单引号包裹字符串常量,例如 test="name != null and name == 'admin'"

A

B

4
单选题

在 MyBatis 的 <foreach> 标签中,当传入的参数是 List 类型时,collection 属性应该设置为什么值?

A

list

B

collection

C

array

D

参数变量名

5
单选题

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

A

<discriminator> 必须指定 columnjavaType 属性

B

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

C

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

D

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

6
多选题

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

A

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

B

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

C

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

D

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

E

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

7
单选题

关于 MyBatis 一级缓存的描述,以下哪项是错误的?

A

一级缓存是 SqlSession 级别的缓存,默认开启

B

同一个 SqlSession 中执行相同的 SQL 查询时,会直接从缓存中获取数据

C

当执行 insert、update、delete 操作时,一级缓存会被清空

D

一级缓存可以在多个 SqlSession 之间共享数据

8
多选题

关于 MyBatis 二级缓存的配置,以下哪些说法是正确的?

A

需要在 MyBatis 全局配置文件中设置 cacheEnabled=true

B

只需要在 Mapper XML 文件中添加 标签即可

C

实体类必须实现 Serializable 接口

D

二级缓存默认使用 LRU 淘汰策略

9
单选题

在 MyBatis 中,TypeHandler 接口定义了几个核心方法用于 Java 类型与 JDBC 类型之间的转换?

A

2个

B

3个

C

4个

D

5个

10
判断题

继承 BaseTypeHandler 实现自定义 TypeHandler 时,必须手动处理 parameter 为 null 的情况。

A

B

11
单选题

在 Spring-MyBatis 集成中,用于创建 SqlSessionFactory 的 Spring Bean 类是哪一个?

A

SqlSessionFactoryBean

B

SqlSessionTemplate

C

MapperScannerConfigurer

D

DataSourceTransactionManager

12
填空题

在使用 @Configuration 类配置 Spring-MyBatis 集成时,SqlSessionFactoryBean 需要通过 setDataSource 方法设置 ______,通过 setTypeAliasesPackage 方法设置 ______________

13
单选题

MyBatis 插件机制中,@Intercepts 注解用于声明插件需要拦截的目标对象和方法。以下哪个对象不属于 MyBatis 插件可拦截的四大核心对象?

A

Executor(执行器)

B

ParameterHandler(参数处理器)

C

TransactionManager(事务管理器)

D

StatementHandler(语句处理器)

14
判断题

MyBatis 配置了多个插件时,它们的执行顺序是按照在 mybatis-config.xml 中配置的顺序依次执行的,先配置的插件会先被拦截执行(即先执行外层的 intercept 逻辑)。

A

B

15
单选题

在 MyBatis 中,以下哪种方式最适合实现"多条件可选查询"的 SQL 语句优化,避免全表扫描并提高执行效率?

A

使用多个 标签拼接所有条件,不考虑索引失效问题

B

使用 标签选择最优索引条件作为首个 WHERE 子句,其余作为 AND 条件

C

将所有条件都用 OR 连接,确保查询结果完整

D

使用动态表名,每次查询都指定不同的物理表

16
单选题

在 MyBatis 中处理大数据量查询时,以下哪种分页方式在数据量达到百万级时性能最优?

A

使用 LIMIT #{offset}, #{pageSize} 的 MySQL 分页方式

B

使用 RowBounds 对象进行内存分页

C

使用基于上一批最后一条记录 ID 的游标分页(WHERE id > lastId LIMIT #{pageSize})

D

先查询总记录数,再根据页码计算 offset 进行分页

17
单选题

在 MyBatis 中调用 MySQL 存储过程 calc_bonus(IN emp_id INT, OUT bonus DECIMAL),以下哪种 Mapper XML 配置是错误的?

A

<select id="callBonus" statementType="CALLABLE" parameterType="map">{CALL calc_bonus(#{empId,mode=IN},#{bonus,mode=OUT})}</select>

B

<update id="callBonus" statementType="CALLABLE" parameterType="map">{CALL calc_bonus(#{empId,mode=IN},#{bonus,mode=OUT,jdbcType=DECIMAL})}</update>

C

<select id="callBonus" statementType="PREPARED">CALL calc_bonus(#{empId},#{bonus})</select>

D

<select id="callBonus" statementType="CALLABLE" parameterType="map">{call calc_bonus(#{empId,mode=IN},#{bonus,mode=OUT,jdbcType=DECIMAL})}</select>

18
多选题

在 MyBatis 中调用带有输入输出参数的存储过程时,关于参数配置的以下说法哪些是正确的?

A

mode=IN 是参数的默认值,可以省略不写

B

mode=OUT 的参数必须在 Java 侧传入一个初始值(如 map.put 或对象属性)

C

mode=INOUT 参数既会作为输入值传入存储过程,又会在执行后被更新为新值

D

OUT 参数必须指定 jdbcType 属性,否则在某些数据库驱动下可能无法正确获取返回值

19
多选题

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

A

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

B

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

C

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

D

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

20
单选题

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

A

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

B

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

C

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

D

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

下一个试卷 → MyBatis 初级技能认证测试

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

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

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

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