码上敲享录 > Mybatis面试题 > Mybatis动态SQL?

Mybatis动态SQL?

上一章章节目录下一章 2023-07-16已有152人阅读 评论(0)

MyBatis提供了丰富的动态SQL功能,可以根据不同的条件和情况,在SQL语句中生成不同的逻辑和参数。这样可以在一条SQL语句中完成多种不同的查询、插入、更新或删除操作。


以下是MyBatis中常用的动态SQL标签:


1. `<if>`标签:用于条件判断,根据条件生成不同的SQL片段。

```xml

<select id="getUserByCondition" resultType="User">

   SELECT * FROM user

   <where>

       <if test="name != null">

           AND name = #{name}

       </if>

       <if test="age != null">

           AND age = #{age}

       </if>

   </where>

</select>

```

2. `<choose>`、`<when>`、`<otherwise>`标签:类似于Java中的switch语句,根据不同的条件选择不同的分支。

```xml

<select id="getUserByCondition" resultType="User">

   SELECT * FROM user

   <where>

       <choose>

           <when test="name != null">

               AND name = #{name}

           </when>

           <when test="age != null">

               AND age = #{age}

           </when>

           <otherwise>

               AND 1 = 1

           </otherwise>

       </choose>

   </where>

</select>

```

3. `<trim>`、`<set>`、`<where>`标签:可以根据条件去掉或添加一些SQL语句中的不必要的元素,如在WHERE或SET中添加AND或逗号等。

```xml

<update id="updateUserByCondition" parameterType="User">

   UPDATE user

   <set>

       <if test="name != null">

           name = #{name},

       </if>

       <if test="age != null">

           age = #{age},

       </if>

   </set>

   WHERE id = #{id}

</update>

```

4. `<foreach>`标签:用于遍历集合或数组,生成多个SQL片段。

```xml

<select id="getUserByIds" resultType="User">

   SELECT * FROM user

   WHERE id IN

   <foreach collection="ids" item="id" open="(" separator="," close=")">

       #{id}

   </foreach>

</select>

```

5. `<sql>`、`<include>`标签:可以将一些公用的SQL片段抽取出来,提高SQL的重用性。

```xml

<!-- 定义公共的SQL片段 -->

<sql id="baseColumns">

   id, name, age

</sql>


<!-- 在具体的SQL语句中引用公共的SQL片段 -->

<select id="getUserById" resultType="User">

   SELECT

   <include refid="baseColumns"/>

   FROM user

   WHERE id = #{id}

</select>

```


这些动态SQL标签可以根据实际的需求和条件,用于生成灵活和动态的SQL语句。它们使得在一个SQL语句中可以根据不同的条件生成不同的查询语句,大大增强了SQL的灵活性和可复用性。通过使用动态SQL,可以减少编写大量的重复SQL语句的工作,提高开发效率和代码可维护性。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交