<select id="searchUser" resultType="User">SELECT * FROM user<where><if test="name != null"> AND name LIKE CONCAT('%', #{name}, '%')</if><if test="age != null"> AND age = #{age}</if></where>
</select>
❌ 不使用动态 SQL(需要写多个方法):
<select id="findByName" ...>SELECT * FROM user WHERE name = #{name}</select>
<select id="findByAge" ...>SELECT * FROM user WHERE age = #{age}</select>
<select id="findByNameAndAge" ...>SELECT * FROM user WHERE name = #{name} AND age = #{age}</select>
🧩 MyBatis 动态 SQL 标签速查表
标签
作用
示例
注意事项
<if>
条件判断
<if test="name != null">AND name = #{name}</if>
test 支持 OGNL 表达式,如 != null && name != ''
<choose><when><otherwise>
分支选择(类似 switch-case)
见下方示例
只能命中一个 <when>,类似 if…else
<trim>
自定义前缀、后缀、去掉多余的分隔符
`<trim prefix=“WHERE” prefixOverrides="AND
OR "> … `
<where>
自动加 WHERE 并去掉首个 AND/OR
<where><if test="...">AND ...</if></where>
自动处理空条件时避免语法错误
<set>
自动加 SET 并去掉多余逗号(用于 UPDATE)
<set><if test="...">name=#{name},</if></set>
适用于动态更新字段
<foreach>
遍历集合,构造 IN 语句、批量插入等
见下方示例
支持 list、array、Map,常用于 IN (...)
<bind>
创建一个变量,可用于字符串拼接等
<bind name="pattern" value="'%' + name + '%'" />
常配合模糊查询使用
📚 示例合集
1️⃣ <if> 使用示例
<selectid="selectUser"resultType="User">SELECT * FROM user<where><iftest="name != null and name != ''">AND name LIKE CONCAT('%', #{name}, '%')</if><iftest="age != null">AND age = #{age}</if></where></select>
2️⃣ <choose> / <when> / <otherwise> 示例
<selectid="selectUser"resultType="User">SELECT * FROM user<where><choose><whentest="name != null">AND name = #{name}</when><whentest="age != null">AND age = #{age}</when><otherwise>AND status = 'active'</otherwise></choose></where></select>
3️⃣ <trim> 示例(手动 WHERE 拼接)
<selectid="selectUser"resultType="User">SELECT * FROM user<trimprefix="WHERE"prefixOverrides="AND |OR "><iftest="name != null">AND name = #{name}</if><iftest="age != null">AND age = #{age}</if></trim></select>
<selectid="selectByIds"resultType="User">SELECT * FROM user WHERE id IN<foreachcollection="idList"item="id"open="("separator=","close=")">#{id}</foreach></select>
语法片段
含义
id="selectByIds"
这是 Mapper 接口中方法对应的 SQL ID
resultType="User"
查询结果会映射成 User 类
collection="idList"
传入的是一个集合参数名,比如一个 List<Integer> 类型的参数
item="id"
遍历集合中的每个元素,当前元素命名为 id
open="("
拼接 SQL 时,开头加一个左括号 (
separator=","
每个参数之间用逗号隔开
close=")"
最后一个参数后加上右括号 )
#{id}
当前遍历元素的值,作为 SQL 参数传入(防 SQL 注入)
6️⃣ <bind> 示例(模糊搜索)
<selectid="searchByName"resultType="User"><bindname="pattern"value="'%' + name + '%'"/>SELECT * FROM user WHERE name LIKE #{pattern}
</select>
GMSL device 使用起来还是比较简单 ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度 一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作
如果遇到 Link 无法建立(Locked&…
1.洛谷 P4342 IOI1998 Polygon
我的博客
2.洛谷 P4290 HAOI2008 玩具取名
题意
某人有一套玩具,并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用 W, I, N, G …