码上敲享录 > Mybatis面试题 > MyBatis的动态SQL有哪些?如何使用动态SQL?

MyBatis的动态SQL有哪些?如何使用动态SQL?

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

MyBatis提供了以下几种常用的动态SQL语法:


1. If条件判断:使用`<if>`元素在SQL语句中添加条件判断。可以根据条件的结果来决定是否包含某部分SQL语句。示例:

```xml

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

   SELECT * FROM user

   WHERE 1=1

   <if test="id != null">

       AND id = #{id}

   </if>

</select>

```

在上述示例中,当参数id不为null时,才会添加AND id = #{id}这一条件。


2. Choose-When-Otherwise选择语句:使用`<choose>`元素、`<when>`元素和`<otherwise>`元素,实现多个条件选择。示例:

```xml

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

   SELECT * FROM user

   WHERE 1=1

   <choose>

       <when test="id != null">

           AND id = #{id}

       </when>

       <when test="username != null">

           AND username = #{username}

       </when>

       <otherwise>

           AND status = 1

       </otherwise>

   </choose>

</select>

```

上述示例中,根据User对象的不同属性来决定按照哪个条件进行查询。


3. Where条件判断:使用`<where>`元素来动态生成WHERE子句,自动去除多余的AND或OR关键字。示例:

```xml

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

   SELECT * FROM user

   <where>

       <if test="id != null">

           AND id = #{id}

       </if>

       <if test="username != null">

           AND username = #{username}

       </if>

       <if test="status != null">

           AND status = #{status}

       </if>

   </where>

</select>

```

在上述示例中,根据User对象的不同属性来拼接WHERE条件,并且自动去除多余的AND关键字。


4. Foreach循环:使用`<foreach>`元素来进行循环操作,用于批量操作或者在SQL语句中生成多个条件。示例:

```xml

<insert id="batchInsertUsers" parameterType="java.util.List">

   INSERT INTO user (username, age) VALUES

   <foreach collection="list" item="item" separator=",">

       (#{item.username}, #{item.age})

   </foreach>

</insert>

```

上述示例中,通过foreach循环将List中的User对象批量插入到数据库。


使用动态SQL只需在映射文件中的SQL语句中嵌入相应的动态SQL元素即可,根据需要添加相应的条件判断、循环等动态内容。动态SQL非常灵活,可以根据不同的条件生成不同的SQL语句,提供了便捷、灵活的数据库访问方式。


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

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交