(1)if
id(2)="findactiveblogwithtitlelike"
resulttype
="blog"
>
select * from blog
where state = 『active』
test
="title != null"
>
and title like #
choose, when, otherwise
id(3)="findactivebloglike"
resulttype
="blog"
>
select * from blog where state = 『active』
test
="title != null"
>
and title like #
test
="author != null and author.name != null"
>
and author_name like #
and featured = 1
trim, where, set
id="findactivebloglike"
resulttype
="blog"
>
select * from blog
test
="state != null"
>state = #
test
="title != null"
>and title like #
test
="author != null and author.name != null"
>and author_name like #
where 元素知道只有在乙個以上的if條件有值的情況下才去插入「where」子句。而且,若最後的內容是「and」或「or」開頭的,where 元素也知道如何將他們去除。
如果 where 元素沒有按正常套路出牌,我們還是可以通過自定義 trim 元素來定製我們想要的功能。比如,和 where 元素等價的自定義 trim 元素為:
prefix類似的用於動態更新語句的解決方案叫做 set。set 元素可以被用於動態包含需要更新的列,而捨去其他的。比如:="where"
prefixoverrides
="and |or "
>
...
id="updateauthorifnecessary"
>
update author
test
="username != null"
>username=#,
test
="password != null"
>password=#,
test
="email != null"
>email=#,
test
="bio != null"
>bio=#
where id=#
(4)foreach
動態 sql 的另外乙個常用的必要操作是需要對乙個集合進行遍歷,通常是在構建 in 條件語句的時候。比如:
id="selectpostin"
resulttype
="domain.blog.post"
>
select *
from post p
where id in
item
="item"
index
="index"
collection
="list"
open
="("
separator
=","
close
=")"
>
#
(5)bind
bind
元素可以從 ognl 表示式中建立乙個變數並將其繫結到上下文。比如:
id="selectblogslike"
resulttype
="blog"
>
name
="pattern"
value
="'%' + _parameter.gettitle() + '%'"
/>
select * from blog
where title like #
Mapper裡的sql語句註解
一 tab user.id,tab user.name,age,address r.id r id,r.name r name,r.userid 這兩個相當於把需要的字段舉例出來,以便後面使用。比如,根據id使用它,相當於貼上裡面的內容資訊一樣。select from tab user left j...
SQL裡動態生成列
一般這種比較複雜一點都用乙個儲存過程來寫比較好。因為單一的檢視不能滿足我們的需求。類似這種,有規律可循的列。如果按照原始的方法 case when then end。我估計是又繁瑣又累,純粹的體力活啊。其實我最開始的時候就是醬寫的 不過好在有大神師傅的指點,簡單多了,而且這個區間值是可以改變的。如下...
Mybatis的Mapper與sql引數傳遞
1.簡單型別 只有乙個引數 select id,role name,note fron t role where id public role getrole interger id 這裡的 的 id 可以是任意值,但一般與傳入的引數形參相同,方便理解 2.傳入引用變數 insert into t ...