Windows 10 企业版 LTSC 21H2 MySQL 5.7.40 Java 1.8 Maven 3.6.3 MyBatis 3.5.6
1 if
实现条件判断,根据条件判断的结果来决定是否添加SQL片段:
xml
1 2 3 4 5 6
<selectid="selectUserListByUser"resultType="com.example.pojo.User"> SELECT * FROM user WHERE name = #{name} <iftest="age != null"> AND age = #{age} </if> </select>
2 where
动态拼接SQL条件,通常配合if标签使用,自动添加WHERE并去除AND和OR:
xml
1 2 3 4 5 6 7 8 9 10 11
<selectid="selectUserListByUser"resultType="com.example.pojo.User"> SELECT * FROM user <where> <iftest="name != null"> AND name = #{name} </if> <iftest="age != null"> AND age = #{age} </if> </where> </select>
<selectid="selectUserListByUser"resultType="com.example.pojo.User"> SELECT * FROM user WHERE name = #{name} <choose> <whentest="age != null"> AND age = #{age} </when> <otherwise> AND age = 18 </otherwise> </choose> </select>
4 foreach
遍历集合,根据集合中的元素生成SQL片段。
范围查询,遍历集合:
xml
1 2 3 4 5 6
<selectid="selectUserListByNames"resultType="com.example.pojo.User"> SELECT * FROM user WHERE name IN <foreachcollection="list"item="name"separator=","open="("close=")"> #{name} </foreach> </select>
范围查询,分割字符串并遍历:
1 2 3 4 5 6
<selectid="selectUserListByNames"resultType="com.example.pojo.User"> SELECT * FROM user WHERE name IN <foreachcollection="names.split(',')"item="name"separator=","open="("close=")"> #{name} </foreach> </select>
批量插入:
xml
1 2 3 4 5 6
<insertid="batchInsert"> INSERT INTO user (name, age, email) VALUES <foreachcollection="list"item="user"separator=","> (#{user.name}, #{user.age}, #{user.email}) </foreach> </insert>
5 set
动态拼接更新语句,自动添加SET并去除逗号:
xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<updateid="updateUserById"> UPDATE user <set> <iftest="name != null"> name = #{name}, </if> <iftest="age != null"> age = #{age}, </if> <iftest="email != null"> email = #{email}, </if> </set> WHERE id = #{id} </update>
6 bind
绑定变量,可以在SQL中使用变量:
xml
1 2 3 4
<selectid="selectUserListByName"resultType="com.example.pojo.User"> <bindname="pattern"value="'%' + name + '%'"/> SELECT * FROM user WHERE name LIKE #{pattern} </select>
7 trim
自定义拼接规则,可以代替where标签和set标签,灵活拼接SQL片段。
常用属性:
属性名
作用
取值
prefix
前缀,默认无前缀
字符串
suffix
后缀,默认无后缀
字符串
prefixOverrides
去除前缀,默认无前缀
字符串
suffixOverrides
去除后缀,默认无后缀
字符串
替代where标签:
xml
1 2 3 4 5 6 7 8 9 10 11
<selectid="selectUserListByUser"resultType="com.example.pojo.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>
替代set标签:
xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<updateid="updateUserById"> UPDATE user <trimprefix="SET"suffixOverrides=","> <iftest="name != null"> name = #{name}, </if> <iftest="age != null"> age = #{age}, </if> <iftest="email != null"> email = #{email}, </if> </trim> WHERE id = #{id} </update>
<updateid="batchUpdate"> UPDATE user <trimprefix="SET"suffixOverrides=","> <trimprefix="name = CASE"suffix="ELSE name END,"> <foreachcollection="list"item="user"> <iftest="user.name != null"> WHEN id = #{user.id} THEN #{user.name} </if> </foreach> </trim> <trimprefix="age = CASE"suffix="ELSE age END,"> <foreachcollection="list"item="user"> <iftest="user.age != null"> WHEN id = #{user.id} THEN #{user.age} </if> </foreach> </trim> <trimprefix="email = CASE"suffix="ELSE email END,"> <foreachcollection="list"item="user"> <iftest="user.email != null"> WHEN id = #{user.id} THEN #{user.email} </if> </foreach> </trim> </trim> WHERE id IN <foreachcollection="list"item="user"separator=","open="("close=")"> #{user.id} </foreach> </update>
条