Mybatis中常用的动态SQL语句

Mybatis中常用的动态SQL语句

1、if 标签用于动态拼接条件

程序员处理业务时,
总会遇到一些动态的条件此时就需要动态的拼接条件。
而Mybatis为我们考虑了这种情况为此提供了一个 if标签
用于动态的拼接SQL语句

具体用法如下:


<select id="findByUser" resultType="user">
    SELECT id,name,age,sex FROM user 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>
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>
        <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拼接过程中多余的 ,

具体用法如下:

    
    <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="" 用于添加前缀 
2.suffix="" 用于添加后缀
3.prefixOverrides="" 用于去除前缀
4.suffixOverrides="" 用于去除后缀
<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>

你可能感兴趣的:(mybatis,mybatis,sql,数据库)