<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 …