本節為大家講解動態sql,所謂動態sql就是可以動態變化sql語句。
public list
findbyuser
(user user)
;
現在假設我們要求該函式實現這樣的功能:
如果傳入的引數user的username不叫李成且不為空就按照user的屬性返回否則返回所有
"findbyuser" parametertype=
"user" resulttype=
"user"
>
select * from user
<
if test=
"username !=null and username!='李成'"
>
name = #
>
<
/where>
<
/select>
下面我們來解析一下上面的內容:
標籤相當於在 select * from user語句後面加上了where語句,但是如果最後if判斷後標籤裡面沒有了sql語句會自動的把where去掉,同時標籤還擁有靈活去掉and語句的功能(上面這個例子沒有體現),將下來是標籤裡面的test屬性值,這裡的username應該是引數user的屬性名,如果沒有這個屬性會報錯(如果傳遞的引數的有成員物件a,可以用a.a的屬性名來獲取a的屬性值,上面的例子也沒有體現這一點)。
最後需要說明的是如果要判斷引數user是否為空貌似mybatis無法實現(反正我不知道,不知道是否可以實現),同時不可以在使用與後而導致其標籤體內容為空,這樣會報錯前面的、、也同理
注意點:在使用標籤時要注意判斷:如果是物件要看是不是null,如果是字串要判斷是不是null和『』
利用sql片斷我們可以把上一小節的內容等效改為下面這樣:
<
!--宣告sql片斷--
>
"select_by_user"
>
name = #
<
/sql>
"findbyuser" parametertype=
"user" resulttype=
"user"
>
select * from user
<
if test=
"username !=null and username!='李成'"
>
<
!--引入sql片斷--
>
"select_by_user"
>
<
/include>
>
<
/where>
<
/select>
具體語法看上面的就懂了,我就不細講了
public list
findbyids
(userqueryvo vo)
;
在userqueryvo類新增下面屬性:
list
ids;
"findbyids"
parametertype
="vo"
resulttype
="user"
>
select * from user
>
test
="ids != null and ids.size > 0"
>
collection
="ids"
item
="id"
open
="id in("
close
=")"
separator
=","
>
$foreach
>
if>
where
>
select
>
上面注釋已經介紹了含義這裡就不解釋了。
test方法內容:
class);
userqueryvo vo =
newuserqueryvo()
; list
list =
newarraylist
()};
vo.setids
(list)
; list
findbyids
(vo)
; system.out.
println
(byids)
; sqlsession.
commit()
;//提交事務,否則會事務回滾
複習知識點
題目 class aclass bextends aclass cextends aclass dextends ba obj newd system.out.println obj instanceofb system.out.println obj instanceofc system.out....
知識點複習
scanf d用於輸入十進位制數 u無符號十進位制輸入 o用於輸入8進製數 c用於輸入單個字元 s用於輸入字串 非空格開始,空格結束,字串變數以 0 結尾 f,lf用於輸入實數,一般使用double,lf 表示對應的輸入量不賦給乙個變數 d printf d帶符號十進位制輸出 u無符號十進位制輸出 ...
mybatis知識點總結
1 resultmap resulttype parametertype parametermap的區別 2 的區別 1 將傳入的資料都當成是乙個字串,會自動對傳入的資料加上乙個雙引號 2 是乙個替換的功能 3 方式可以很大程度上防止sql注入 4 一般用於傳入資料庫物件,例如傳入表名 5 myba...