MyBatis动态 SQL使用方法示例

MyBatis 的动态 SQL 主要可以做以下几件事:

  1. 条件 WHERE 子句
    使用 if 标签动态添加 where 子句。
<select id="findUser" parameterType="map" resultType="User">
  select * from users
  <where> 
    <if test="id != null">
      and id = #{id}   
    </if>   
  </where>
</select>
  1. 多条件 AND/OR 语句
    使用 choose/when/otherwise 标签实现多条件过滤。
<select id="findUser" resultType="User">
   select * from users 
   <where>
     <choose>
       <when test="id != null">
         and id = #{id}   
       </when>   
       <when test="email != null">
         and email = #{email}        
       </when>   
       <otherwise>
         and username = #{username}       
       </otherwise>   
     </choose>    
   </where>
</select>  
  1. IN 语句
    使用 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. SQL 片段
    使用 sql 标签定义可重用的 SQL 模块。
<sql id="selectColumns"> 
   id, name, age
</sql> 

<select>
  select
   <include refid="selectColumns">
 </select>
  1. 其它
    MyBatis 动态 SQL 还可以做:
  • 去除多余的 AND/OR
  • 嵌套 IF 语句
  • 条件 ORDER BY 等

总的来说,MyBatis 的动态 SQL 主要解决了动态拼接 SQL 的复杂性,提供了易读易写与好维护的解决方案。同时也提高了 SQL 的复用性。