一、標簽介紹
insert,update,delete,select,sql,resultMap
sql:可被其它語句引用的可重用語句塊;
resultMap:確定實體類屬性與表中字段對應關系;
二、namespace的作用
在MyBatis中,Mapper中的namespace用於綁定Dao接口的,即面向接口編程。
它的好處在於當使用了namespace之后就可以不用寫接口實現類,業務邏輯會直接通過這個綁定尋找到相對應的SQL語句進行對應的數據處理
三、parametetType屬性
在<insert>,<update>,<select>,<delete>標簽中,可以通過parameterType指定輸入參數的類型,類型可以是簡單類型、hashmap、pojo的包裝類型。
parameterType屬性是可以省略的.MyBatis框架可以根據SqlSession接口中方法的參數
來判斷輸入參數的實際數據類型.
四、#{參數名}
1、含義、#{}實現的是向prepareStatement中的預處理語句中設置參數值,sql語句中#{}表示一個占位符即?
2、使用#{參數名},將參數的內容添加到sql語句中指定位置.
如果當前sql語句中只有一個參數,此時參數名稱可以隨意定義
但是,如果當前sql語句有多個參數,此時參數名稱應該是與當前表關聯[實體類的屬性名]或者[Map集合關鍵字]
2.1:讀取對象屬性
2.2:讀取map關鍵字
3.#{}和${}區別
在MyBatis中提供了兩種方式讀取參數的內容到SQL語句中,分別是
#{參數名} :實體類對象或則Map集合讀取內容
${參數名} :實體類對象或則Map集合讀取內容
#{} : 采用預編譯方式,可以防止SQL注入
${}: 采用直接賦值方式,無法阻止SQL注入攻擊
在大多數情況下,我們都是采用#{}讀取參數內容.但是在一些特殊的情況下,我們還是需要使用${}讀取參數的.
比如 有兩張表,分別是emp_2017 和 emp_2018 .如果需要在查詢語句中動態指定表名,就只能使用${}
<select>
select * from emp_${year}
<select>
再比如.需要動態的指定查詢中的排序字段,此時也只能使用${}
<select>
select * from dept order by ${name}
</select>
簡單來說,在JDBC不支持使用占位符的地方,都可以使用${}
五、resultType屬性
4.1、resultType屬性存在<select>標簽.負責將查詢結果進行映射.
4.2、resultType屬性可以指定一個基本類型也可以是一個實體類類型
4.3、使用resultType屬性為實體類類型時,只有查詢出來的列名和實體類中的屬性名一致,才可以映射成功. 如果查詢出來的列名和pojo中的屬性名全部不一致,就不會創建實體類對象.但是只要查詢出來的列名和實體類中的屬性有一個一致,就會創建實體類對象
4.4、resultType屬性無法與resultMap屬性同時出現.
5、resultMap
MyBatis框架中是根據表中字段名到實體類定位同名屬性的.如果出現了實體類屬性名與表中字段名不一致的情況,則無法自動進行對應.此時可以使用resultMap來重新建立實體類與字段名之間對應關系.
六.sql標簽