我們需要知道的是,使用mybatis重點是對sql的靈活解析和處理。在原先的UserMappser.xml中,我們這樣查詢表中滿足條件的記錄 :
<select id="findUserList" parameterType="userQueryVo" resultType="user"> select id,username,birthday from user where username like '${value}'</select>上述語句在表中查詢滿足username條件的記錄,這樣寫查詢語句有一個弊端,就是該語句只能通過username查詢數(shù)據(jù)庫。當(dāng)我們在多條件中查詢時,如果不需要username條件而是需要其它多個查詢條件時,那UserMapper.xml文件中的這個查詢條件就沒用了。
需求:將自定義查詢條件查詢用戶列表和查詢用戶列表總記錄數(shù)改為動態(tài)sql。需要使用if標(biāo)簽和where標(biāo)簽。
使用if標(biāo)簽和where標(biāo)簽在UserMapper.xml中添加如下內(nèi)容: 修改自定義查詢條件查詢用戶列表代碼:
修改自定義查詢條件查詢用戶列表總記錄數(shù)代碼:
發(fā)現(xiàn)< where>和< if>在上述兩個查詢語句中重復(fù)的代碼出現(xiàn)了兩次,那這里我們是否可以把相同的sql片段拿出來單獨寫在一個sql片段中然后再在不同的查詢語句中應(yīng)用呢?答案是肯定的,看下面的sql片段。
通過sql片段可以將通用的sql語句抽取出來,單獨定義,在其它的statement中可以引用sql片段。其中通用的sql語句,一般用在:where條件、查詢列。
在UserMapper.xml中添加< sql>標(biāo)簽代表sql片段:
這樣就完成了sql片段的定義,然后才能使用sql片段。
使用< include>標(biāo)簽對上面定義的sql片段加以引用:
和
測試類代碼不變,這樣我們便完成了對sql片段的引用。
有時候我們希望查詢語句是這樣select id,username,birthday from user where username like ‘%codingXiaxw%’ and id in (1,2),那我們又應(yīng)該在sql片段中如何添加代碼呢?這時候需要用到< foreach>標(biāo)簽。
在statement通過foreach遍歷parameterType中的集合類型。首先我們需要在UserQueryVo中定義Listids屬性:
并添加相應(yīng)的get和set方法。
然后我們在UserMapper.xml中使用foreach修改where語句,使用foreache遍歷list:
各屬性說明見代碼注釋,然后是測試代碼:
通過這5篇文章,我們便完成了MyBatis學(xué)習(xí)的基礎(chǔ)知識。
新聞熱點
疑難解答