MyBatis动态Sql 基础标签
if 标签
if 标签可以⾃动根据表达式的结果来决定是否将对应的语句添加到 SQL 中,如果条件不成⽴则不添加,
如果条件成⽴则添加。
<select id="findByAccount" parameterType="com.southwind.entity.Account" resultType="com.southwind.entity.Account"> select * from t_account where <if test="id!=0"> id = #{id} </if> <if test="username!=null"> and username = #{username} </if> <if test="password!=null"> and password = #{password} </if> <if test="age!=0"> and age = #{age} </if> </select>
where 标签
where 标签可以⾃动判断是否要删除语句块中的 and 关键字,如果检测到 where 直接跟 and 拼接,则
⾃动删除 and,通常情况下 if 和 where 结合起来使⽤。
<select id="findByAccount" parameterType="com.southwind.entity.Account" resultType="com.southwind.entity.Account"> select * from t_account <where> <if test="id!=0"> id = #{id} </if> <if test="username!=null"> and username = #{username} </if> <if test="password!=null"> and password = #{password} </if> <if test="age!=0"> and age = #{age} </if> </where> </select>
choose 、when 标签
<select id="findByAccount" parameterType="com.southwind.entity.Account" resultType="com.southwind.entity.Account"> select * from t_account <where> <choose> <when test="id!=0"> id = #{id} </when> <when test="username!=null"> username = #{username} </when> <when test="password!=null"> password = #{password} </when> <when test="age!=0"> age = #{age} </when> </choose> </where> </select>
trim 标签
trim 标签中的 prefix 和 suffix 属性会被⽤于⽣成实际的 SQL 语句,会和标签内部的语句进⾏拼接,如
果语句前后出现了 prefixOverrides 或者 suffixOverrides 属性中指定的值,MyBatis 框架会⾃动将其删
除。
<select id="findByAccount" parameterType="com.southwind.entity.Account" resultType="com.southwind.entity.Account"> select * from t_account <trim prefix="where" prefixOverrides="and"> <if test="id!=0"> id = #{id} </if> <if test="username!=null"> and username = #{username} </if> <if test="password!=null"> and password = #{password} </if> <if test="age!=0"> and age = #{age} </if> </trim> </select>
set 标签
set 标签⽤于 update 操作,会⾃动根据参数选择⽣成 SQL 语句。
<update id="update" parameterType="com.southwind.entity.Account"> update t_account <set> <if test="username!=null"> username = #{username}, </if> <if test="password!=null"> password = #{password}, </if> <if test="age!=0"> age = #{age} </if> </set> where id = #{id} </update>
foreach 标签
foreach 标签可以迭代⽣成⼀系列值,这个标签主要⽤于 SQL 的 in 语句。
collection:collection 属性的值有三个分别是 list、array、map 三种,分别对应的参数类型为:List、数组、map 集合。
item :表示在迭代过程中每一个元素的别名
index :表示在迭代过程中每次迭代到的位置(下标)
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔
<!--Sql例子:SELECT * FROM t_account WHERE id in (1,2,3)--> <select id="findByIds" parameterType="com.southwind.entity.Account" resultType="com.southwind.entity.Account"> select * from t_account <where> <!--collection:是parameterType的那个集合的参数名--> <foreach collection="ids" open="id in (" close=")" item="id" separator=","> #{id} </foreach> </where> </select>