mybatis使用小記

2021-09-07 22:16:13 字數 3568 閱讀 9880

參考資料:

1、設定不快取每次查詢的結果:

如題,通過設定 flushcache="true" usecache="false" 兩個屬性來達到目的。

flushcache

將其設定為true,不論語句什麼時候被呼叫,都會導致快取被清空。預設值:false。

usecache

將其設定為true,將會導致本條語句的結果被快取。預設值:true。

2、返回型別的設定:

resulttype、resultmap不可同時使用(雖然都指定這兩個屬性時不會報錯)。

前者將資料庫表的欄位名對映成指定的欄位名,並封裝成指定的物件;後者將資料庫表欄位名對映成返回型別裡同名字段,若有些欄位在返回型別裡沒有對應欄位則可能出錯。

3、insert語句返回自增主鍵值

方法之一是在insert標籤裡加上usegeneratedkeys="true", keyproperty="addedtime" 這兩個屬性,其中addedtime是傳入引數之一,插入後返回的最新主鍵值將賦給該變數,程式中就可以通過該傳入引數獲得新主鍵值。

4、mybatis sql語句中 foreach的使用

相關資料:

示例如下。foreach可對三種物件做迴圈,分別為list,(array),map三種。

collection指出相對哪個元素做迴圈,item迴圈中的具體物件,index指序號(list、陣列中)或key(map中)。

<

insert

id="insertpostimgsinfo"

parametertype

="map"

>

insert into post_img (pid,img_order,img_location) values

<

foreach

collection

="imgpath"

item

="item"

index

="index"

separator

=","

>

( #,#,#

)foreach

>

insert

>

5、關於#{}和${}

預設情況下,前者有佔位符的效果,使用#{}語法,mybatis會產生preparedstatement語句,並且安全地設定preparedstatement引數,這個過程中mybatis會進行必要的安全檢查和轉義;而後者則是直接拼接,傳入什麼就是什麼。示例如下:

執行sql:select

*from emp where name =

#引數:employeename

=>

smith

解析後執行的sql:

select

*from emp where name =

?並設定引數為

'smith

'執行sql:

select

*from emp where name =

$引數:employeename傳入值為:smith

解析後執行的sql:

select

*from emp where name =smith

總的來說:$y=2x+x^2$

${}方式會引發sql注入的問題,同時也會影響sql語句的預編譯,所以從安全性和效能的角度出發,能使用#{}的情況下就不要使用 \${}

而對於動態表名、動態字段、排序字段,則只能使用${}才能達到預期的功能。注意:當使用${}引數作為欄位名或表名時,需要指定statementtype=statement,而使用#{}時不能有該語句

6、mybatis使用like查詢:select * from person where name  like "%"#"%"

7、mybatis批量插入:

1

2<

insert

id="insertjourneybatch"

parametertype

="map"

>

3insert into

4train_journey5(

6user_id,

7local_journey_id,

8begin_time,

9end_time,

10journey_type,

11begin_latitude,

12end_latitude,

13begin_longitude,

14end_longitude,

15driving_mode,

16duration,

17rapid_acc_times,

18rapid_turn_times,

19acc_score,

20turn_score,final_score21)

22values

23<

foreach

collection

="arrayjourneydata"

item

="item"

index

="index"

24separator

=","

>25(

26#,

27#,

28#,

29#,

30#,

31#,

3233

#,34

#,35

#,36

#,37

#,38

39#,

40#,

41#,

42#,43#

44)45foreach

>

46insert

>

view code

8、mybatis批量查詢

1

2<

select

id="selectlatestgpsinjourneybyuseridbegintime"

parametertype

="list"

resulttype

="map"

>

3select

4user_id as userid,

5timestamp,

6latitude,

7longitude,

8speed,

9bearing

10from train_feature_new

11where

12<

foreach

item

="item"

index

="index"

collection

="list"

open

="("

separator

="or"

close

=")"

>user_id=# and journey_time=#

foreach

>

view code

Mybatis框架學習小記(三)

1.namespace 2.select 選擇,查詢語句 步驟 編寫介面 查閱全部使用者 listgetuserlist 根據id查詢使用者 user getuserbyid int id insert乙個使用者 int adduser user user 修改使用者 int updateuser ...

小記 測試用例 mybatis主鍵返回

spring 1.5x 測試用例 runwith springrunner.class springboottest class activeprofiles test public class demo1 註解mybatis 主鍵返回 options usegeneratedkeys true k...

oracle rownum使用小記

對於 oracle 的 rownum 問題,很多資料都說不支援 between.and,只能用以上符號 並非說用 gt between.and 時會提示sql語法錯誤,而是經常是查不出一條記錄來,還會出現似乎是莫名其妙的結果來,其實您只要理解好了這個 rownum 偽列的意義就不應該感到驚奇,同樣是...