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

动态 SQL 专题测试

14 题 45 分钟 难度:

考察知识点

  • if 条件判断:OGNL 表达式、字符串判断、嵌套使用
  • choose-when-otherwise 分支:互斥条件选择,类比 switch-case
  • where 智能条件:智能插入 WHERE 关键字、去除多余 AND/OR
  • set 更新字段:UPDATE 语句中智能处理 SET 关键字和尾逗号
  • trim 自定义裁剪:prefix、prefixOverrides、suffix、suffixOverrides 属性
  • foreach 循环遍历:批量插入、IN 查询、collection 属性取值
  • bind 变量绑定:OGNL 表达式创建变量、模糊查询拼接
  • sql 片段复用<sql> 定义与 <include> 引用、跨命名空间
  • 动态 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 中,关于 <sql> 片段的使用,以下说法正确的是:

A

<sql> 片段只能在同一个 Mapper XML 文件中使用 <include> 标签引用

B

<sql> 片段可以通过 refid 引用其他命名空间的片段

C

<sql> 片段定义时必须指定 id 属性,使用时通过 <include refid="..."> 引用

D

<sql> 片段中可以包含完整的 SQL 语句,包括 SELECT、FROM、WHERE 等关键字,但不支持动态 SQL 标签

4
填空题

在 MyBatis 中,若要从一个 Mapper XML 文件引用另一个命名空间中定义的 SQL 片段,需要使用完整的命名空间格式。假设有命名空间为 com.example.mapper.UserMapper 的 Mapper,其中定义了 id="base_columns" 的 SQL 片段,在当前 Mapper 中引用该片段的正确语法是使用 ______ 标签,并设置 refid 属性为 ____________

5
单选题

在 MyBatis 中,<bind> 标签的主要作用是:

A

将 Java 方法绑定到 SQL 语句中执行

B

创建一个新变量,可以对传入的参数进行再加工,常用于模糊查询的 LIKE 拼接

C

绑定数据库连接池的配置参数

D

将 SQL 查询结果绑定到 Java 对象的特定属性

6
判断题

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

A

B

7
多选题

以下关于 MyBatis 中 <if> 标签使用的描述,哪些是正确的?

A

<if> 标签可以嵌套使用,实现复杂的条件组合逻辑

B

<if> 标签的 test 属性中可以使用 &&|| 进行逻辑运算

C

判断字符串参数不为空字符串时,应同时判断 != null!= '',以避免传入空字符串导致 SQL 语法错误

D

<if> 标签只能用在 <select> 语句中,不能用在 <update><delete>

8
单选题

在 MyBatis 的动态 SQL 中,<choose><when><otherwise> 标签组合的功能最接近 Java 中的哪种语法结构?

A

if-else if-else

B

switch-case-default

C

try-catch-finally

D

for-each 循环

9
判断题

在 MyBatis 中,<where> 标签只有在其内部至少有一个 <if> 或其他动态 SQL 标签返回了内容时,才会插入 WHERE 关键字。如果所有条件都不满足,则不会生成 WHERE 子句。

A

B

10
多选题

在 MyBatis 中,关于 <set> 标签在 UPDATE 语句中的使用,以下说法正确的有哪些?

A

<set> 标签会自动在字段前添加 SET 关键字

B

<set> 标签会自动去除字段列表末尾多余的逗号

C

如果 <set> 标签内部没有任何条件满足,生成的 SQL 仍然包含 SET 关键字

D

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

11
单选题

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

A

list

B

collection

C

array

D

参数变量名

12
填空题

在 MyBatis 中,使用 <foreach> 实现批量插入用户数据。假设传入参数为 List<User> 类型,使用 @Param("users") 注解指定参数名。请补全以下 SQL 模板中的空缺部分:

XML
<insert id="batchInsert">
    INSERT INTO user (name, email, age)
    VALUES
    <foreach ______="users" item="user" ______="," open="(" close=")" separator=",">
        #{________}, #{user.email}, #{user.age}
    </foreach>
</insert>
13
简答题

请编写一个 MyBatis Mapper XML 方法 searchUsers,要求实现以下功能:

  1. 支持多条件动态查询:用户名(模糊匹配)、邮箱、状态、角色列表
  2. 用户名使用 <bind> 标签进行模糊查询拼接
  3. 角色列表使用 <foreach> 实现 IN 查询
  4. 使用 <where> 标签智能处理 WHERE 子句
  5. 结果按创建时间倒序排列

请写出完整的 XML 配置。

14
多选题

以下关于 MyBatis 动态 SQL 的描述,哪些是错误的?

A

<choose> 标签中可以包含多个 <when>,所有满足条件的 <when> 都会执行

B

<trim> 标签的 prefixOverrides 属性用于在内容开头添加指定的前缀字符串

C

<foreach> 标签遍历 Map 类型参数时,index 表示键(key),item 表示值(value)

D

<sql> 片段中不能使用 <if><where> 等动态 SQL 标签

← 上一个试卷 与 Spring 集成专题测试
下一个试卷 → 参数传递与结果映射专题测试

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

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

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

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