Mybatis學習筆記之動態SQL揭秘

2022-09-28 21:39:28 字數 1681 閱讀 4932

前言

動態sql是mybatis的乙個強大的特性,在使用jdbc運算元據時,如果查詢條件特別多,將條件串聯成sql字串是一件非常痛苦的事情,通常的解決方法使寫很多的if-else條件語句去判斷和拼接,並確保不能忘了空格或在字段的最後省略逗號。mybatis使用一種強大的動態sql語言來改善這種情況

動態sql基於ognl的表示式,可使我們能方便地在sql語句中實現某些邏輯,那麼有哪些元素來支援這種功能程式設計客棧呢?這就是下面我要說的了

上面小編所說的這些元素,都是用於mapper.xml檔案中的,並且它還是乙個標籤,雙標籤。其實用法和咱們普通的編寫j**a用法差不多,接下來小編就來一一講解一下單個的元素都好說,來說說組合標籤

使用if+where實現多條件查詢

select * from user

and username like concat('%',#,'%')

上述**就是乙個最簡單的if+where的sql對映語句,where元素標籤會自動識別其標籤內是否有返回值,若有,就插入乙個where關鍵字,此外,若該標籤返回的內容是以and或者or開頭的,where元素會將其自動剔除,if元素標籤裡主要的屬性就是test屬性,test後面跟的是乙個表示式,返回true或者false,以此來進行判斷。

使用if+trim實現對條件查詢

select * from user

and username like concat('%',#,'%')

從上述**中可以看出trim和where元素標籤的用法差不多,就trim標籤中多了幾個元素,那多了啥元素呢?

接下來再來看看使用動態sql來實現更新操作

使用if+set實現更新操作

update app_info

logopicpath=#,

logolocpath=#,

modifyby=#,

modifydate=#,

where id=#

上述**就是乙個最簡單的if+set的動態sql,從上面的**中能看出其所做的更新操作是動態的,意思就是說你這個值為不為空,不為空就給你更新,要是為空就不管它,emmmm,看樣子它的設計還是很人性化的。

上面的操作也是可以用trim來實現的

if+trim實現更新操作

update app_info

&程式設計客棧lt;trim prefix="set" suffiwww.cppcns.comxoverride="," suffix="where id=#">

logopicpath=#,

logolocpath=#,

modifyby=#,

modifydat

小編之前已經介紹過trim的用法了,在這裡就不再贅述了,認真的童鞋應該都明白了。

接下來就是使用foreach完成複雜查詢,先說說mybatis入參為陣列的foreach迭代

小編先帶大家了解一下foreach的基本用法和屬性,foreach主要用於在構建in條件中,它可以在sql語句中迭代乙個集合。它的屬性主要有:item、index、collection、separator、close、open,下面我們來看**

www.cppcns.com" resultmap="usermapbyrole">

select * from user_info where userrole in

# 本文標題: mybatis學習筆記之動態sql揭秘

本文位址:

Mybatis學習筆記 動態SQL

這片文章是對自己學習的總結。在mybatis的crud語句中,可以通過設定一些引數或者標籤,來讓我們寫sql語句時更加便利。sql元素的作用就是可以定義一條sql的一部分,然後以後的sql語句都可以直接引用它來減少 量。最常用的場景就是,我們在乙個dao層介面的配置檔案中進行各種各樣的查詢,但每次查...

mybatis學習之動態sql

1 select查詢 簡單的select類似如下 select id findbyid resultmap studentresult parametertype integer select from t student where id select 1 if 常用於各種查詢的條件判斷部分 se...

mybatis學習筆記三之mybatis外掛程式

一 外掛程式介紹 一般情況下,開源框架都會提供外掛程式或其他形式的擴充套件點,供開發者自行擴充套件。一是增加了框架的靈活性 二是開發者可以結合實際需求,對框架進行擴充套件。以mybatis為例,我們可基於mybatis外掛程式機制實現分頁 分表 監控等功能,在無形中增強功能。二 mybatis外掛程...