java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))
什么是動態sql
mybatis核心對sql語句進行靈活操作,通過表達式進行判斷,對sql進行靈活拼接、組裝。
標簽介紹
1.if標記(if是動態sql中最最常用的標記)
動態 SQL 通常要做的事情是有條件地包含 where 子句的一部分。常用形式:
<select id="**" resultType="**" parameterType="**">select * from table where 1=1<if test="attr!=null">and attrColumn>#{attr}</if></select>2.choose, when, otherwise標記
有些時候,我們不想用到所有的條件語句,而只想從中擇其一二。針對這種情況,MyBatis 提供了 choose 元素。常用形式:
select * from table where 1=1 <choose><when test="attr1!=null">and attrColumn like #{attr}</when>…… <otherwise>and attr2 is not null</otherwise> </choose>3.where標記
select * from table <where><if test="attr1!=null">attr1Column like #{attr1}</if><if test="attr2!=null">and attr2Column =#{attr2}</if> </where>可以看到,使用where標記有兩個好處:
- ?不再需要在where后面加上1=1這個條件
- 會智能處理and
4.foreach標記
foreach標記是最為強大的一個標記,最基本的功能是用來實現對一個集合進行遍歷查詢,循環賦值。通常是在構建 IN 條件語句的時候使用。
foreach標記主要是使用一下一些屬性標記來實現:?
- item:迭代的內容?
- collection:循環的集合或指定的類型?
- separator:元素之間的分隔符?
- open:開始符,可選屬性?
- close:閉合符,可選屬性,一般與open聯合使用?
- index:list的序號,可選屬性?
使用foreach進行遍歷查詢的常用形式:
select * from table <where>id in<foreach item="item" index="index" collection="list"open="(" separator="," close=")">#{item}</foreach></where>?
需求
用戶信息綜合查詢列表和用戶信息查詢列表總數這兩個statement的定義使用動態sql。對查詢條件進行判斷,如果輸入參數不為空才進行查詢條件拼接。
mapper.xml
測試代碼
sql片段
1.需求
將上邊實現的動態sql判斷代碼塊抽取出來,組成一個sql片段。其它的statement中就可以引用sql片段。方便程序員進行開發。
2.定義sql片段
3.引用sql片段
在mapper.xml中定義的statement中引用sql片段:
?
foreach(了解)
向sql傳遞數組或List,mybatis使用foreach解析
1.需求
在用戶查詢列表和查詢總數的statement中增加多個id輸入查詢。
sql語句如下:
兩種方法:
- SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
- SELECT * FROM USER WHERE id IN(1,10,16)
2.在輸入參數類型中添加List<Integer> ids傳入多個id
3.修改mapper.xml
WHERE id=1 OR id=10 OR id=16
在查詢條件中,查詢條件定義成一個sql片段,需要修改sql片段。
4.測試代碼
5.另外一個sql的實現
?
總結
以上是生活随笔為你收集整理的java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java元婴期(25)----java进
- 下一篇: java元婴期(26)----java进