咱們須要知道的是,使用mybatis重點是對sql的靈活解析和處理。在原先的UserMappser.xml中,咱們這樣查詢表中知足條件的記錄 :sql
1 2 3 |
<select id="findUserList" parameterType="userQueryVo" resultType="user"> select id,username,birthday from user where username like '${value}' </select> |
上述語句在表中查詢知足username
條件的記錄,這樣寫查詢語句有一個弊端,就是該語句只能經過username查詢數據庫。當咱們在多條件中查詢時,若是不須要username條件而是須要其它多個查詢條件時,那UserMapper.xml文件中的這個查詢條件就沒用了。數據庫
需求:將自定義查詢條件查詢用戶列表和查詢用戶列表總記錄數改成動態sql。須要使用if標籤和where標籤。mybatis
使用if標籤和where標籤在UserMapper.xml中添加以下內容:
修改自定義查詢條件查詢用戶列表代碼:app
發現<where>
和<if>
在上述兩個查詢語句中重複的代碼出現了兩次,那這裏咱們是否能夠把相同的sql片斷拿出來單獨寫在一個sql片斷中而後再在不一樣的查詢語句中應用呢?答案是確定的,看下面的sql片斷。spa
經過sql片斷能夠將通用的sql語句抽取出來,單獨定義,在其它的statement中能夠引用sql片斷。其中通用的sql語句,通常用在:where條件、查詢列。code
在UserMapper.xml中添加<sql>
標籤表明sql片斷:
這樣就完成了sql片斷的定義,而後才能使用sql片斷。xml
使用<include>
標籤對上面定義的sql片斷加以引用:
和
get
測試類代碼不變,這樣咱們便完成了對sql片斷的引用。table
有時候咱們但願查詢語句是這樣select id,username,birthday from user where username like '%codingXiaxw%' and id in (1,2)
,那咱們又應該在sql片斷中如何添加代碼呢?這時候須要用到<foreach>
標籤。
在statement經過foreach遍歷parameterType中的集合類型。首先咱們須要在UserQueryVo中定義Listids屬性:
並添加相應的get和set方法。
而後咱們在UserMapper.xml中使用foreach修改where語句,使用foreache遍歷list:
各屬性說明見代碼註釋,而後是測試代碼: