动态 SQL 专题测试
考察知识点
- 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 综合应用:多标签组合实现复杂查询
在 MyBatis 的动态 SQL 中,<trim> 标签用于自定义裁剪 SQL 片段。以下关于 <trim> 标签属性的描述,错误的是:
在 MyBatis 中,<where> 和 <set> 标签底层都可以用 <trim> 标签来实现。以下哪些 <trim> 配置可以分别等价于 <where> 和 <set> 标签的功能?
在 MyBatis 中,关于 <sql> 片段的使用,以下说法正确的是:
在 MyBatis 中,若要从一个 Mapper XML 文件引用另一个命名空间中定义的 SQL 片段,需要使用完整的命名空间格式。假设有命名空间为 com.example.mapper.UserMapper 的 Mapper,其中定义了 id="base_columns" 的 SQL 片段,在当前 Mapper 中引用该片段的正确语法是使用 ______ 标签,并设置 refid 属性为 ____________。
在 MyBatis 中,<bind> 标签的主要作用是:
在 MyBatis 的 <if> 标签中,test 属性可以使用 OGNL 表达式进行条件判断,判断字符串相等时需要使用单引号包裹字符串常量,例如 test="name != null and name == 'admin'"。
以下关于 MyBatis 中 <if> 标签使用的描述,哪些是正确的?
在 MyBatis 的动态 SQL 中,<choose>、<when>、<otherwise> 标签组合的功能最接近 Java 中的哪种语法结构?
在 MyBatis 中,<where> 标签只有在其内部至少有一个 <if> 或其他动态 SQL 标签返回了内容时,才会插入 WHERE 关键字。如果所有条件都不满足,则不会生成 WHERE 子句。
在 MyBatis 中,关于 <set> 标签在 UPDATE 语句中的使用,以下说法正确的有哪些?
在 MyBatis 的 <foreach> 标签中,当传入的参数是 List 类型时,collection 属性应该设置为什么值?
在 MyBatis 中,使用 <foreach> 实现批量插入用户数据。假设传入参数为 List<User> 类型,使用 @Param("users") 注解指定参数名。请补全以下 SQL 模板中的空缺部分:
<insert id="batchInsert">
INSERT INTO user (name, email, age)
VALUES
<foreach ______="users" item="user" ______="," open="(" close=")" separator=",">
#{________}, #{user.email}, #{user.age}
</foreach>
</insert>
请编写一个 MyBatis Mapper XML 方法 searchUsers,要求实现以下功能:
- 支持多条件动态查询:用户名(模糊匹配)、邮箱、状态、角色列表
- 用户名使用
<bind>标签进行模糊查询拼接 - 角色列表使用
<foreach>实现 IN 查询 - 使用
<where>标签智能处理 WHERE 子句 - 结果按创建时间倒序排列
请写出完整的 XML 配置。
以下关于 MyBatis 动态 SQL 的描述,哪些是错误的?
📝 发现内容有误?点击此处直接编辑
长按或扫描二维码,立即体验