亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

有關(guān)mybatis知識點解析 mybatis調(diào)用存儲過程( 四 )


當(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)容,希望對您有所幫助: