當(dāng)然了,不光是Mybatis,幾乎所有的包括Hibernate,支持延遲加載的原理都是一樣的 。
映射器#{}和${}的區(qū)別
#{}是占位符,預(yù)編譯處理;${}是拼接符,字符串替換,沒有預(yù)編譯處理 。Mybatis在處理#{}時,#{}傳入?yún)?shù)是以字符串傳入,會將SQL中的#{}替換為?號,調(diào)用PreparedStatement的set方法來賦值 。Mybatis在處理時 , 是 原 值 傳 入 , 就 是 把 {}時,是原值傳入,就是把時,是原值傳入,就是把{}替換成變量的值,相當(dāng)于JDBC中的Statement編譯變量替換后,#{} 對應(yīng)的變量自動加上單引號 ‘’;變量替換后,${} 對應(yīng)的變量不會加上單引號 ‘’#{} 可以有效的防止SQL注入,提高系統(tǒng)安全性;${} 不能防止SQL 注入#{} 的變量替換是在DBMS 中;${} 的變量替換是在 DBMS 外模糊查詢like語句該怎么寫 (1) ’%${question}%’ 可能引起SQL注入,不推薦
(2)”%”#{question}”%” 注意:因為#{…}解析成sql語句時候,會在變量外側(cè)自動加單引號’ ‘,所以這里 % 需要使用雙引號” “,不能使用單引號 ’ ‘,不然會查不到任何結(jié)果 。
(3)CONCAT(’%’,#{question},’%’) 使用CONCAT()函數(shù),推薦
(4)使用bind標(biāo)簽
<select id="listUserLikeUsername" resultType="com.jourwon.pojo.User"><bind name="pattern" value="'%' + username + '%'" />select id,sex,age,username,password from person where username LIKE #{pattern}</select>在mapper中如何傳遞多個參數(shù)方法1:順序傳參法
public User selectUser(String name, int deptId);<select id="selectUser" resultMap="UserResultMap">select * from userwhere user_name = #{0} and dept_id = #{1}</select>#{}里面的數(shù)字代表傳入?yún)?shù)的順序 。
這種方法不建議使用,sql層表達不直觀,且一旦順序調(diào)整容易出錯 。
方法2:@Param注解傳參法
public User selectUser(@Param("userName") String name, int @Param("deptId") deptId);<select id="selectUser" resultMap="UserResultMap">select * from userwhere user_name = #{userName} and dept_id = #{deptId}</select>#{}里面的名稱對應(yīng)的是注解@Param括號里面修飾的名稱 。
這種方法在參數(shù)不多的情況還是比較直觀的,推薦使用 。
方法3:Map傳參法
public User selectUser(Map<String, Object> params);<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">select * from userwhere user_name = #{userName} and dept_id = #{deptId}</select>#{}里面的名稱對應(yīng)的是Map里面的key名稱 。
這種方法適合傳遞多個參數(shù),且參數(shù)易變能靈活傳遞的情況 。
方法4:Java Bean傳參法
public User selectUser(User user);<select id="selectUser" parameterType="com.jourwon.pojo.User" resultMap="UserResultMap">select * from userwhere user_name = #{userName} and dept_id = #{deptId}</select> #{}里面的名稱對應(yīng)的是User類里面的成員屬性 。
這種方法直觀,需要建一個實體類,擴展不容易,需要加屬性,但代碼可讀性強,業(yè)務(wù)邏輯處理方便,推薦使用 。
Mybatis如何執(zhí)行批量操作使用foreach標(biāo)簽
foreach的主要用在構(gòu)建in條件中,它可以在SQL語句中進行迭代一個集合 。foreach標(biāo)簽的屬性主要有item,index,collection,open,separator,close 。
item表示集合中每一個元素進行迭代時的別名,隨便起的變量名;index指定一個名字,用于表示在迭代過程中,每次迭代到的位置,不常用;open表示該語句以什么開始,常用“(”;separator表示在每次進行迭代之間以什么符號作為分隔符,常用“,”;close表示以什么結(jié)束,常用“)” 。在使用foreach的時候最關(guān)鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 重陽節(jié)的來歷兒童故事
- 流鼻血和癌癥是否有關(guān)系 勿忽視身體發(fā)出的求救信號
- 手指發(fā)麻可能與身體大病有關(guān) 尤其是上半身疾病
- 有關(guān)土地方面,農(nóng)民務(wù)必清楚 一畝地等于多少平方米?
- 有關(guān)肩周炎的誤區(qū) 肩周炎的自我康復(fù)訓(xùn)練法
- 睡眠健身與“性愛”也有關(guān)系?
- 相親成功率與心理年齡有關(guān)?
- 高二下冊地理知識點總結(jié) 高二地理知識點總結(jié)
- 八年級上冊英語筆記整理 初二英語下冊知識點
- 有關(guān)環(huán)境的小視頻 環(huán)保宣傳視頻短片
