mybatis的mapper映射配置文件詳解


一、標簽介紹

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標簽

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM