Mybatis動態Sql與分頁

2021-09-03 07:44:30 字數 2137 閱讀 9656

1.mybatis動態sql

1.1 if

1.2 trim

1.3 foreach

1.4 其他

choose/set/where

2.模糊查詢(3種方式)

2.1 引數中直接加入%%

2.2 使用$代替#(不建議使用該方式,有sql注入風險)

關鍵:#與$區別?

引數型別為字串,#會在前後加單引號['],$則直接插入值

注:1) mybatis中使用ognl表示式傳遞引數

2) 優先使用#

3) $方式存在sql注入風險

2.3 sql字串拼接concat

3.查詢返回結果集

resultmap:適合使用返回值是自定義實體類的情況

resulttype:適合使用返回值的資料型別是非自定義的,即jdk的提供的型別

3.1 使用resultmap返回自定義型別集合

3.2 使用resulttype返回list3.3 使用resulttype返回單個物件

3.4 使用resulttype返回list,適用於多表查詢返回結果集

3.5 使用resulttype返回map,適用於多表查詢返回單個結果集

4.分頁查詢

為什麼要重寫mybatis的分頁?

mybatis的分頁功能很弱,它是基於記憶體的分頁(查出所有記錄再按偏移量offset和邊界limit取結果),在大資料量的情況下這樣的分頁基本上是沒有用的

4.1 匯入分頁外掛程式

com.github.pagehelper

pagehelper

5.1.2

4.2 將pagehelper外掛程式配置到mybatis中

4.3 在你需要進行分頁的mybatis方法前呼叫pagehelper.startpage靜態方法即可,緊跟在這個方法後的第乙個mybatis查詢方法會被進行分頁

//設定分頁處理

if (null != pagebean && pagebean.ispaginate())

4.4 獲取分頁資訊(二種方式)

4.4.1 使用外掛程式後,查詢實際返回的是page,而非list,page繼承了arraylist,同時還包含分頁相關的資訊

pagepage = (page)list;

system.out.println("頁碼:" + page.getpagenum());

system.out.println("頁大小:" + page.getpagesize());

system.out.println("總記錄:" + page.gettotal());

4.4.2 使用pageinfo

pageinfo pageinfo = new pageinfo(list);

system.out.println("頁碼:" + pageinfo.getpagenum());

system.out.println("頁大小:" + pageinfo.getpagesize());

system.out.println("總記錄:" + pageinfo.gettotal());

5.特殊字元處理

>(>)

<(<)

&(&)

空格( )

mybatis中#和$的區別

#將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。

如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by 『111』,

如果傳入的值是id,則解析成的sql為order by 「id」.

$將傳入的資料直接顯示生成在sql中。

如:order by use

ri

duser_id

useri​

d,如果傳入的值是111,那麼解析成sql時的值為order by user_id,

如果傳入的值是id,則解析成的sql為order by id.

#方式能夠很大程度防止sql注入。

$方式無法防止sql注入。

$方式一般用於傳入資料庫物件,例如傳入表名.

一般能用#的就別用$.

mybatis 動態sql及分頁

if 一樣的用拼接條件 bname trim 格式化標籤 prefix 字首 suffix 字尾 suffixoverrides 減除最後乙個 foreach 遍歷集合,批量查詢,通常用於in關鍵字 select from t mvc book where bid in 2.1 引數中直接加入 2....

Mybatis動態sql和分頁

1.mybatis動態sql 1.1 if 1.2 trim 1.3 foreach 1.4 其他 choose set where2.模糊查詢 3種方式 2.1 引數中直接加入 2.2 使用 代替 不建議使用該方式,有sql注入風險 關鍵 與 區別?引數型別為字串,會在前後加單引號 則直接插入值 ...

mybatis動態sql和分頁

1.mybatis動態sql 1.1 if 1.2 trim 1.3 foreach 1.4 其他 choose set where2.模糊查詢 3種方式 2.1 引數中直接加入 2.2 使用 代替 不建議使用該方式,有sql注入風險 關鍵 與 區別?引數型別為字串,會在前後加單引號 則直接插入值 ...