mybatis基礎應用中需要注意的地方

2021-08-17 04:13:34 字數 2086 閱讀 1913

在用mybatis的時候需要注意的點,做下筆記。

這樣也是可以的

2、mybatis的引數傳遞

2.1、${}與#{}的區別:${}在動態解析的時候把引數直接與sql語句拼起來,這種方式會造成sql注入。#{}是在預編譯時用佔位符 ?代替,然後再設定引數。

2.2、單個引數:如果基本型別mybatis不會做特殊處理,可以#{}獲取,大括號裡面屬性不做規定,但最好跟你的引數同名。如果是物件,則直接根據屬性名取就可以了。如果是傳入的是string的值,則必須使用#或#

public user find(int id);//介面方法

//sql語句

select * from tbl_employee where id = #或#

public listfindlistbylastname(string name);

//select * from tbl_employee where last_name=#或#

2.3、多個引數:多個引數時mybatis會把每個引數都封裝到map裡作為value,生成預設的key為param1.....paramn,或者也可以通過引數的索引獲取。

public employee findbyparams1(integer id, string name);

//通過預設生成的key獲取

select * from tbl_employee where id = # and last_name like '%$%'

//也可以通過引數命名的方式指定map的key,這樣更直觀更方便操作

public employee findbyparams(@param("id")integer id, @param("emp")employee e);

//通過指定的key獲取

select * from tbl_employee where id = # and last_name like '%$%'

opjo:如果你傳入的引數是資料模型裡的屬性,就可以直接傳入pojo。#:取出傳入的pojo的屬性值。

map:如果多個引數不是業務模型中的資料,沒有對應的pojo,不經常使用也可以傳入map。#:取出map中對應的值

to:如果多個引數不是業務模型中的資料,但是經常要使用,推薦來編寫乙個to(transfer object)資料傳輸物件。比如我們分頁就是編寫乙個to來儲存分頁資料,比如pageindex,pagesize等等。

注意:如果是集合或陣列型別的引數,也會做特殊處理,封裝到map中。集合則用list作為key,陣列則用array作為key。

//引數為集合或陣列型別

public employee findbycollectionorarray(listli, string arr);

//list和array是固定寫法

select * from tbl_employee where id=# and last_name=#

2.4、在mybatis模糊查詢中關於${}和#{}的使用

如果sql語句中通過#{}取值的話,會報錯。

select * from tbl_employee where last_name like '%#%'

報錯資訊

然後結合控制台列印出來的sql資訊來看,原因是在編譯的時候會把#替換成了佔位符?,又會把整個'%?%'當成乙個字串,當在設定引數時找不到佔位符?,所以才會報錯。

解決辦法:

select * from tbl_employee where last_name like '%$%'

select * from tbl_employee where last_name like '%'#'%'

如果有什麼不對的地方還請大家指正。

關於mybatis,需要掌握的基礎

目錄 總結 mybatis,需要掌握的基礎如下 1 了解orm 思想 orm思想的作用 對映配置的兩種方式 2 mybatis開發流程 基本使用 3 日誌框架 4 了解mybatis生命週期並抽取工具類mybatisutil mybatisutil工具類的作用 6 註解開發 7 動態sql 8 物件...

RequestBody在實際運用中需要注意的地方

requestbody主要用來接收前端傳遞給後端的json字串中的資料的 前端傳值的json是字串,不是json物件 在使用 requestbody接收資料時,get方式無請求體,前端不能使用get方式提交資料,需要使用post方式進行提交。在後端的接受方法中,requestbody最多只能有乙個,...

STL中的vector對於char 需要注意的問題

為什麼用vector不能輸出正確的值?因為陣列是事先開闢好的,pushback進去的是陣列的位址,所以無論你怎麼改輸入的內容,都是把乙個相同的東西存進去。解決方法 重新定義乙個char temp buf new char 10 然後strcpy,再push back進去。c define crt s...