Mybatis动态9种sql,简单使用
MyBatis中常见的动态SQL标签:
- :用于在SQL语句中加入条件判断。
- 、、:类似于Java中的switch-case语句,用于多条件判断。
- :用于去除多余的SQL片段。
- :在SQL语句中加入WHERE子句,并根据条件动态组装查询条件。
- :用于在UPDATE语句中动态生成SET子句。
- :用于遍历集合,并根据集合元素动态生成SQL语句的循环部分。
- :用于在SQL语句中声明变量。
案例:
if
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="getUsersByCondition" resultType="com.example.User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
</mapper>
、、
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="getUsersByCondition" resultType="com.example.User">
SELECT * FROM users
<where>
<choose>
<!-- 如果id不为空,则使用id作为查询条件 -->
<when test="id != null">
AND id = #{id}
</when>
<!-- 如果name不为空,则使用name作为查询条件 -->
<when test="name != null and name != ''">
AND name = #{name}
</when>
<!-- 如果age不为空,则使用age作为查询条件 -->
<when test="age != null">
AND age = #{age}
</when>
<!-- 如果没有满足条件的情况,则执行otherwise中的SQL -->
<otherwise>
AND 1=1
</otherwise>
</choose>
</where>
</select>
</mapper>
trim
- prefix:指定在SQL语句开头添加的内容。
- prefixOverrides:指定需要从SQL语句开头去除的内容。
- suffix:指定在SQL语句结尾添加的内容。
- suffixOverrides:指定需要从SQL语句结尾去除的内容。
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="getUsersByCondition" resultType="com.example.User">
SELECT * FROM users
<where>
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="email != null and email != ''">
AND email = #{email}
</if>
</trim>
</where>
</select>
</mapper>
set
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<update id="updateUserInfo">
UPDATE users
<set>
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
</set>
WHERE id = #{id}
</update>
</mapper>
foreach
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="getUsersByIdList" resultType="com.example.User">
SELECT * FROM users
WHERE id IN
<foreach collection="idList" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
</mapper>
bind
- name:指定临时变量的名称。
- value:指定对临时变量赋值的表达式。
<bind name="variableName" value="expression" />