輸入(parameterType)與輸出(resultType、resultMap)映射的區別


輸出映射:

   resultType

:   主要針對於從數據庫中提取相應的數據出來

  使用resultType時我們應該注意:sql查詢的列名要和resultType指定pojo的屬性名相同,指定相同屬性方可映射成功,如果sql查詢的列名要和resultType指定pojo的屬性名全部不相同(或是部分不相同),則映射到pojo對象中的對應屬性為null。例如有時候我們不需要查詢select * from user where id = ?而是select username,address _address where id = ? 此時我們給查詢的address列名給了一個別名_address,這樣我們通過查詢表中address的數據然后在將它映射到User對象時,該對象的address屬性就為null,即沒將從表中查詢到的address數據映射到user對象的address屬性中。

  此時resultMap就出現了。如果sql查詢列名和最終要映射的pojo的屬性名不一致,使用resultMap就可以將列名和pojo的屬性名做一個對應關系 (列名和屬性名映射配置)。


 

 

  resultMap

使用resultMap需要在UserMapper.xml中進行配置:

 

 

 

然后在UserMapper.xml中使用它:

 

 

 UserMapper.java文件中:

 

 

 測試類代碼:

 

 

 運行測試類發現,即使我們查詢的列名與User對象的屬性不一樣,但是我們的確映射成功了。

 

輸入映射: 

  parameterType:

通過parameterType傳入簡單類型或對象,我們之前講過了,接下來我們要講的是parameterType傳遞pojo包裝對象。可以定義pojo包裝類型擴展mapper接口輸入參數的內容。

看下我們的需求:定義查詢條件查詢用戶信息,需要向statement輸入查詢條件,查詢條件可以有user信息、商品信息等等。

首先我們在domain包下創建UserCustom類並繼承User,

 

 

 

 

 

 

UserCustom類用於對User屬性進行擴展(例如User中只有用戶信息,而我們可以在UserCustom中加入商品信息),然后再創建User的包裝類UserQueryVo.java:

 

 

 

UserMapper.xml中添加如下配置信息:

 

 

 

UserMapper.java中添加方法:

 

 

 

然后便可以進行測試:

 

 

 

可能出現的異常:如果在parameterType中指定了錯誤的屬性名時會出現如下異常:

org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'

 

  

 


免責聲明!

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



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