parametertype屬性是用來控制sql中需要傳入的引數型別的屬性,同樣是通過不同型別的對映值來確定,這一點和resulttype屬性一樣。
sqlsession的例項化物件的 selectlist()、selectone()方法中,第二個引數均為需要傳入的sql引數;selectmap()的第三個引數為需要傳入sql語句引數
在mybatis裡,只能傳入乙個引數,如果想要傳入多個引數,需要通過物件或者map集合的方式傳入
然後談一談#{}和${}的使用
1.#{}可以通過 索引#(mybatis下標是從0開始),#獲取第乙個引數;若是只傳入乙個引數,可以通過#{}直接獲取
2.如果傳入引數型別是物件,需要在#{}中寫入物件屬性名;如果傳入引數型別是map集合名,需要在#{}中寫入鍵名;來獲取對應的引數
3.${}中,如果內容寫入的是基本資料型別的值,則sql語句直接使用這個值;需要使用$才能獲得傳入物件的屬性值
主要區別:
1.使用#{}時,mybatis中的sql語句會被預編譯處理(此時低層應該使用的是preparedstatement物件?),即會先將sql中的#{}用佔位符?替代,並編譯。
然後該sql語句在獲取引數時,會呼叫preparedstatement的set方法來賦值。即#{}是預編譯處理。
2.使用${}時,mybatis會直接將${}獲得的引數值和${}替換,就是把${}替換成變數的值(在編譯階段就已經替換了)。即${}是字串替換
當想直接在sql語句中插入乙個不改變的字串。比如,像order by,你可以這樣來使用:order by $
一般來說能使用#{}盡量使用#{}
原因如下:
#{}既然是預編譯處理,那麼使用#{}就能夠很大的程度上防止sql注入;而${}無法防止sql注入
myBatis中 和 區別
1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接顯示生成在sql中。如 order by u...
mybatis 中 和 區別
在使用mybatis 框架時 在xml的配置檔案中,通常是使用 來獲取數值的 如 select from t user inf where id 這時 如果你傳入的值為zhangsan 則會編譯成為 select from t user inf where id zhangsan mybatis 會...
Mybatis 中 和 區別
號與 區別 號表示引數,代表乙個字串。如 select a,b,c from table1 where id value 傳入引數後如 value 1 則可生成 select a,b,c from table1 where id 1 select a,b,c from table1 where ci...