Mybatis中常用的动态SQL语句
1、if
标签用于动态拼接条件
程序员处理业务时,
总会遇到一些动态的条件此时就需要动态的拼接条件。
而Mybatis为我们考虑了这种情况为此提供了一个if
标签
用于动态的拼接SQL语句
具体用法如下:
<select id="findByUser" resultType="user">
SELECT id,name,age,sex FROM user WHERE
<!-- if语句 中当条件满足则动态的拼接该SQL语句 如果不满足条件则不拼接该条SQL语句-->
<if test="id != null">id = #{id} </if>
<if test="name != null">AND name = #{name} </if>
<if test="age != null">AND age = #{age} </if>
<if test="age != null">AND age = #{age} </if>
</select>
2、动态拼接WHERE
子句
在动态使用
if
的过程中,有时我们会遇到一些问题 比如上方的SQL语句如果第一个条件不成立的情况下,
SQL语句就会出现拼接错误。为了解决这种现象,Mysql为我们提供了WHERE
标签,WHERE
标签
可以动态的去除AND
关键字 从而消除SQL语句出错的情况。
!!!注意: AND 关键字只能写在 条件前面 如果写在后面则无法去除。
具体用法如下:
<select id="findByUser" resultType="user">
SELECT id,name,age,sex FROM user
<!--通过使用 WHERE 标签 来动态的清除 AND -->
<where>
<if test="id != null">id = #{id} </if>
<if test="name != null">AND name = #{name} </if>
<if test="age != null">AND age = #{age} </if>
<if test="age != null">AND age = #{age} </if>
</where>
</select>
3、拼接SET
子句
在进行数据库的修改操作时,有时我们也需要进行动态的修改数据,但在动态修改时又会遇到一些问题
Mybatis为我们提供了SET
标签用于 去除 动态SQL拼接过程中多余的,
具体用法如下:
<!--修改用户 动态的SQL-->
<update id="updateSQL" >
update user
<set >
<if test=" name != null"> name=#{name}, </if>
<if test=" age != null"> age=#{age}, </if>
<if test=" sex != null"> sex=#{sex}, </if>
</set>
WHERE id = #{id}
</update>
4、 万能拼接标签 trim
但上述两种动态的拼接SQL时,有时又不够灵活,Mybatis为我们考虑到了这一点,Mybatis提供了trim
标签
trim
标签自定义制定规则。
属性:
1.prefix="" 用于添加前缀 <br>
2.suffix="" 用于添加后缀 <br>
3.prefixOverrides="" 用于去除前缀 <br>
4.suffixOverrides="" 用于去除后缀 <br>
<select id="findByTrim" resultType="com.atguigu.pojo.User">
select * from user
<trim prefix="where" suffix=";" prefixOverrides="and|or" suffixOverrides=",">
<if test="id !=null">id=#{id}</if>
<if test="name !=null">and name=#{name}</if>
<if test="age !=null">and age=#{age}</if>
<if test="sex !=null">and sex=#{sex},</if>
</trim>
</select>
分支结构用法(类似于java中的 if–else-if–else)
当进行业务查询时,可能我们需要动态的拼接SQL语句但是又不想所有条件都满足才执行而是想要
然后直接进行查询,如果不满足进行第二次判断。这种情况下首先想到的是通过java进行条件的
筛选然后执行不同的SQL语句。但是这样的话我们需要写3条SQL语句而 Mybatis为了方便我们
的开发为我们提供了一组标签choose
when
otherwise
用于进行动态的判断和SQL
语句的拼接。 作用类似与java中的if-elseif-else
<select id="findUser" resultType="user">
SELECT * FROM user
<where>
<choose>
<when test="name != null"> name=#{name}</when>
<when test="age != null"> name=#{age}</when>
<otherwise test="age != null"> name=#{age}</otherwise>
</choose>
</where>
</select>