1. 程式人生 > >MyBatis【六】動態sql

MyBatis【六】動態sql

我們需要知道的是,使用mybatis重點是對sql的靈活解析和處理。在原先的UserMappser.xml中,我們這樣查詢表中滿足條件的記錄 :

<select id="findUserList" parameterType="userQueryVo" resultType="user">
        select id,username,birthday from user where username like '${value}'
</select>
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

上述語句在表中查詢滿足username條件的記錄,這樣寫查詢語句有一個弊端,就是該語句只能通過username查詢資料庫。當我們在多條件中查詢時,如果不需要username條件而是需要其它多個查詢條件時,那UserMapper.xml檔案中的這個查詢條件就沒用了。

需求:將自定義查詢條件查詢使用者列表和查詢使用者列表總記錄數改為動態sql。需要使用if標籤和where標籤。

1.if和where

使用if標籤和where標籤在UserMapper.xml中新增如下內容:
修改自定義查詢條件查詢使用者列表程式碼:
這裡寫圖片描述
修改自定義查詢條件查詢使用者列表總記錄數程式碼:
這裡寫圖片描述
發現< where>和< if>在上述兩個查詢語句中重複的程式碼出現了兩次,那這裡我們是否可以把相同的sql片段拿出來單獨寫在一個sql片段中然後再在不同的查詢語句中應用呢?答案是肯定的,看下面的sql片段。

2.sql片段

通過sql片段可以將通用的sql語句抽取出來,單獨定義,在其它的statement中可以引用sql片段。其中通用的sql語句,一般用在:where條件、查詢列。

2.1定義sql片段

在UserMapper.xml中新增< sql>標籤代表sql片段:
這裡寫圖片描述
這樣就完成了sql片段的定義,然後才能使用sql片段。

2.2使用sql片段

使用< include>標籤對上面定義的sql片段加以引用:
這裡寫圖片描述

這裡寫圖片描述
測試類程式碼不變,這樣我們便完成了對sql片段的引用。

有時候我們希望查詢語句是這樣select id,username,birthday from user where username like ‘%codingXiaxw%’ and id in (1,2),那我們又應該在sql片段中如何新增程式碼呢?這時候需要用到< foreach>標籤。

3.foreach標籤

在statement通過foreach遍歷parameterType中的集合型別。首先我們需要在UserQueryVo中定義Listids屬性:
這裡寫圖片描述
並新增相應的get和set方法。

然後我們在UserMapper.xml中使用foreach修改where語句,使用foreache遍歷list:
這裡寫圖片描述
各屬性說明見程式碼註釋,然後是測試程式碼:
這裡寫圖片描述
通過這5篇文章,我們便完成了MyBatis學習的基礎知識。