动态SQL
if
- 通过
test
属性中的表达式判断标签中的内容是否有效- 有效则自动拼接至sql语句
<select id="getEmpByCondition" resultMap="getEmpByConditionMap" > select * from t_emp where <if test="empName != null and empName != ''"> emp_name = #{empName} </if> <if test="age != null and age != ''"> and age = #{age} </if> <if test="gender != null and gender != ''"> and gender = #{gender} </if> </select>
- 有效则自动拼接至sql语句
where
where和if一般结合使用
- 如果where中的if条件都不满足,则where标签没有任何功能,也不会添加where关键字
- 如果where中的if条件满足,则where标签会自动添加where关键字,并去除多余的and
<select id="getEmpByCondition" resultMap="getEmpByConditionMap" > select * from t_emp <where> <if test="empName != null and empName != ''"> emp_name = #{empName} </if> <if test="age != null and age != ''"> and age = #{age} </if> <if test="gender != null and gender != ''"> and gender = #{gender} </if> </where> </select>
trim
trim
用于去掉或添加标签中的内容- 属性:
prefix
:在trim
标签中的内容前添加某些内容prefixOverrides
:在trim
标签的内容前去掉某些内容suffix
:在trim
标签中的内容后添加某些内容suffixOverrides
:在trim
标签内容后区队某些内容<select id="getEmpByCondition" resultMap="getEmpByConditionMap" > select * from t_emp <trim prefix="where" suffixOverrides="and"> <if test="empName != null and empName != ''"> emp_name = #{empName} </if> <if test="age != null and age != ''"> age = #{age} </if> <if test="gender != null and gender != ''"> gender = #{gender} </if> </trim> </select>
choose、when、otherwise
类似于java中的switch语句
<select id="getByChoose" resultMap="getEmpByConditionMap"> select * from t_emp <where> <choose> <when test="empName != null and empName != ''"> emp_name = #{empName} </when> <when test="age != null and age != ''"> age = #{age} </when> <when test="gender != null and gender != ''"> gender = #{gender} </when> </choose> </where> </select>