本文已同步至我的博客 liaosi's blog-iBatis和MyBatis在使用ResultMap對應關係時的區別
在使用iBatis和MyBatis的查詢時,查詢出來的數據一般會由一個ResultMap來接收。若是在sql語句中 SELECT 出來的字段和ResultMap中的column沒有一一對應,是否會有影響呢?並且ResultMap一般會用到多個查詢的sql中,這就是必需要考慮的一個問題。java
在iBatis中,若是查詢的字段比ResultMap中對應的字段多,不會報錯。
若是ResultMap中字段多了,查詢數據的時候沒有 SELECT 出來這個數據,那麼此時就會報錯,好比說我查詢的時候沒有查詢gyTradeCode
這個字段,可是ResultMap裏面有這個字段,報了以下錯誤:spring
--- The error occurred in market-shop/sql/GoodOrder.xml. --- The error occurred while applying a result map. --- Check the GoodOrder.GoodOrderResult. --- Check the result mapping for the 'gyTradeCode' property. --- Cause: java.sql.SQLException: Invalid column name, dubbo version: 0.0.1-SNAPSHOT, current host: 127.0.0.1 org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in market-shop/sql/GoodOrder.xml. --- The error occurred while applying a result map. --- Check the GoodOrder.GoodOrderResult. --- Check the result mapping for the 'gyTradeCode' property. --- Cause: java.sql.SQLException: Invalid column name
結論是:ResultMap裏的column不能比sql中查詢的字段多,可是查詢的字段是能夠比ResultMap中的多。因此當咱們在ResultMap中增長了一個字段時,全部用到了這個ResultMap的sql語句都要在SELECT中增長對應的字段。sql
若是是使用MyBatis,這種對應關係誰多誰少都不會報錯,不影響。app