Mybatis ResultMap 和 resultType 區別


一、概述
MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,resultType是直接表示返回類型的,而resultMap則是對外部ResultMap的引用,但是resultType跟resultMap不能同時存在。
在MyBatis進行查詢映射時,其實查詢出來的每一個屬性都是放在一個對應的Map里面的,其中鍵是屬性名,值則是其對應的值。
①當提供的返回類型屬性是resultType時,MyBatis會將Map里面的鍵值對取出賦給resultType所指定的對象對應的屬性。所以其實MyBatis的每一個查詢映射的返回類型都是ResultMap,只是當提供的返回類型屬性是resultType的時候,MyBatis對自動的給把對應的值賦給resultType所指定對象的屬性。
②當提供的返回類型是resultMap時,因為Map不能很好表示領域模型,就需要自己再進一步的把它轉化為對應的對象,這常常在復雜查詢中很有作用。

 

二、ResultType

Blog.java

  1. public class Blog {  
  2.        private int id;  
  3.        private String title;  
  4.        private String content;  
  5.        private String owner;  
  6.        private List<Comment> comments;  
  7. }  

 

其所對應的數據庫表中存儲有id、title、Content、Owner屬性。

 

  1. <typeAlias alias="Blog" type="com.tiantian.mybatis.model.Blog"/>  
  2. <select id="selectBlog" parameterType="int" resultType="Blog">  
  3.       select * from t_blog where id = #{id}  
  4. </select>  


MyBatis會自動創建一個ResultMap對象,然后基於查找出來的屬性名進行鍵值對封裝,然后再看到返回類型是Blog對象,再從ResultMap中取出與Blog對象對應的鍵值對進行賦值。

三、ResultMap
當返回類型直接是一個ResultMap的時候也是非常有用的,這主要用在進行復雜聯合查詢上,因為進行簡單查詢是沒有什么必要的。先看看一個返回類型為ResultMap的簡單查詢,再看看復雜查詢的用法。

①簡單查詢的寫法

  1. <resultMap type="Blog" id="BlogResult">  
  2.         <id column="id" property="id" />  
  3.         <result column="title" property="title" />  
  4.         <result column="content" property="content" />  
  5.         <result column="owner" property="owner" />  
  6.     </resultMap>  
  7.     <select id="selectBlog" parameterType="int" resultMap="BlogResult">  
  8.         select *  
  9.         from t_blog where id = #{id}  
  10.     </select>  


select映射中resultMap的值是一個外部resultMap的id,表示返回結果映射到哪一個resultMap上,外部resultMap的type屬性表示該resultMap的結果是一個什么樣的類型,這里是Blog類型,那么MyBatis就會把它當作一個Blog對象取出。resultMap節點的子節點id是用於標識該對象的id的,而result子節點則是用於標識一些簡單屬性的,其中的Column屬性表示從數據庫中查詢的屬性,Property則表示查詢出來的屬性對應的值賦給實體對象的哪個屬性。簡單查詢的resultMap的寫法就是這樣的。


免責聲明!

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



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