摘要:輸入參數類型指定輸入參數類型,通過從輸入對象中獲取參數值放置在中。查詢結果處理指定輸出結果類型,將查詢結果的一行記錄數據映射為指定類型的對象。
MyBatis理解與掌握(輸入與輸出)
@(MyBatis)[Java, 框架, MyBatis]
占位符和拼接能防止sql注入問題,所一能盡量用#{}就盡量用#{}
用來傳入參數,sql在解析的時候會加上 "" 當成字符串來解析 ,如這里 role_id = "roleid";
模糊查詢(不同的數據庫采用不同的sql拼接方式)
mysql:
select * from t_user where name like concat("%",#{zhang},"%")
oracle:
select * from t_user where name like "%" || #{zhang} || "%"${}:拼接符
存在sql注入問題
$一般用入傳入數據庫對象,比如數據庫表名、列名
注意:數據庫表名、列名和排序方式不能使用#,而 應該使用$
表名使用拼串:sql select * from ${tableName};
列名使用拼串:sql select ${colName} from t_user;
排序使用拼串: sql select * from t_user where age = #{age} order by name ${orderType2}
繞過了驗證機制,把不應該查詢的數據也給查詢出來了,存在數據安全問題。拼串存在SQL注入是因為它把參數作為sql語法的一部分進行了編譯,數據庫會執行這條語句。使用占位符不存在SQL注入,是因為參數是在在sql編譯后傳遞,數據庫只會把參數作為查詢條件進行判斷。
"select * from t_user where id =" + id; String id = "1 or 1=1"; //sql 注入出現
如果使用的是拼接的方式,對參數不同的sql語句會多次編譯,增加了編譯次數,降低效率。
原因:占位符方式,sql語句到數據庫中取數據前才把參數加入進去。拼接是sql語句和參數一同編譯,參數不同,編譯后生成的sql語句不同,需要多次編譯。
指定輸入參數類型, mybatis 通過 ognl 從輸入對象中獲取參數值放置在 sql中。
parameterType="Integer"
應用場景:sql中只有一個參數的時候使用
parameterType="com.george.pojo.Employee"
注意要寫類的全路徑
sql的參數會從自定義類的屬性中獲取,執行時,會根據參數名稱在對象中反射調用方法,如果相同名稱的屬性不存在,會發生異常,所以__參數名稱必須和屬性名稱保持一致__
應用場景:sql中多個參數有相同的含義,使用自定義類型
User user = session.selectOne("selectUser",user );
parameterType="Map"
sql的參數會從Map集合中根據key獲取參數值。所以,參數名稱必須和Map集合的key名稱一樣
應用場景:sql中多個參數沒有任何的關系時,采用Map集合類型。
User user = session.selectOne("selectUser",map);
指定輸出結果類型, mybatis 將 sql 查詢結果的一行記錄數據映射為 resultType 指定類型的對象。
封裝成一個類Mybatis框架的輸出主要針對的就是 查詢結果輸出
resultType屬性表示將查詢結果轉換為指定類型的對象時需要遵循的規則:
(1)查詢結果的 字段名稱回和屬性名稱進行匹配 ,如果匹配成功,則反射調用,通過set方法,賦值給對象。
(2)如果沒有相匹配的字段和屬性名稱,則不會賦值,特殊情況下,一個屬性都沒有完成匹配,那么對象不會創建,返回null
(3)在屬性名稱和字段名稱不匹配的情況下,可以通過sql語句中取別名或者在
select u_code as userCode from t_user;
封裝成一個Map
將字段名作為key,查詢結果值作為value,放到Map中
Map map = session.selectOne("selectUser");
使用場景:當數據間沒有任何的關系,采用Map集合類型。
封裝String與簡單類型將查詢結果轉換為String類型
返回的是查詢結果的第一個字段
使用場景:
當獲取數量或單一字段值的時候,使用簡單類型接收數據
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77144.html
摘要:語句在代碼中硬編碼,造成代碼不易于維護,實際應用變化的可能較大,變動需要改變代碼。對結果集解析存在硬編碼查詢列名,變化導致解析代碼變化,系統不易于維護,如果能將數據庫記錄封裝成對象解析比較方便。 MyBatis理解與掌握(簡介) @(MyBatis)[Java, 框架, MyBatis] 簡介 ??Mybatis是一個數據持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數的手...
摘要:理解與掌握動態框架就是簡單的條件判斷,利用語句我們可以實現某些簡單的條件選擇。有了元素我們就可以動態的更新那些修改了的字段。 MyBatis理解與掌握(動態SQL) @(MyBatis)[Java, 框架, MyBatis] if if 就是__簡單的條件判斷 __,利用if語句我們可以實現某些簡單的條件選擇。先來看如下一個例子: select * from user whe...
摘要:前言想要進入等一線互聯網公司,以下是你必需具備的技能。包由解釋程序自動加載,不需要顯示說明。包包括許多具有特定功能的類,有日期向量哈希表堆棧等,其中類支持與時間有關的操作。包定義了應用程序編程接口,是應用程序環境的中性平臺組件結構。 前言 想要進入BAT等一線互聯網公司,以下是你必需具備的技能。如果你掌握的不牢固,那就趕快鞏固,如果你還沒有涉及,現在就立馬學習起來吧。 1.Java語言...
摘要:訂單信息與訂單明細為一對多關系。例如先從單表查詢,需要時再從關聯表去關聯查詢,大大提高數據庫性能,因為查詢單表要比關聯查詢多張表速度要快。作用將關聯查詢信息映射到一個對象中。 MyBatis理解與掌握(關聯查詢) @(MyBatis)[Java, 框架, MyBatis] 一對一查詢 案例:查詢所有訂單信息,關聯查詢下單用戶信息 showImg(https://segmentfault...
閱讀 2772·2021-11-19 11:30
閱讀 3058·2021-11-15 11:39
閱讀 1782·2021-08-03 14:03
閱讀 1985·2019-08-30 14:18
閱讀 2043·2019-08-30 11:16
閱讀 2149·2019-08-29 17:23
閱讀 2597·2019-08-28 18:06
閱讀 2533·2019-08-26 12:22