MyBatis 的动态 SQL 实现方式有几种?

MyBatis 的动态 SQL 有以下几种实现方式:

  1. if:
    根据条件包含where子句。
<select id="findUser" parameterType="map" resultType="User">
  select * from users 
  <where> 
    <if test="username != null">
      and username = #{username}  
    </if>
  </where>
</select>
  1. choose/when/otherwise:
    等同于 Java 的 switch 语句。
<select id="findUser" resultType="User">
   select * from users
   <choose>
     <when test="id != null">
       and id = #{id}   
     </when>   
     <when test="email != null">
       and email = #{email}     
     </when>   
     <otherwise>
       and username = #{username}       
     </otherwise>   
   </choose>
</select>
  1. foreach:
    迭代集合,动态生成 in 语句
<select id="selectPostIn" resultType="map">
 select * from post where id in 
 <foreach item="item" index="index" collection="list" 
       open="(" separator="," close=")">
        #{item}   
 </foreach>
</select>
  1. trim:
    去除多余的 and 或 or
<trim prefix="where" prefixOverrides="and |or ">      
 ... 
</trim>  
  1. where:
    更高层次的trim语法
<where>
 ... 
</where>  

总的来说,MyBatis 提供了丰富的动态 SQL 实现方式,包括条件判断、迭代集合、去除多余字符等功能。