2014-02-25 49 views
0

我使用resultset類從jsp中的mysql獲取數據庫信息。現在我正在使用Spring MVC。那麼我會用什麼?結果集或Rowmapper?Rowmapper是最好的?

的RowMapper

public class UserRowMapper implements RowMapper<User> { 

    @Override 
    public User mapRow(ResultSet resultSet, int line) throws SQLException { 
     UserExtractor userExtractor = new UserExtractor(); 
     return userExtractor.extractData(resultSet); 
    } 

} 

public class UserExtractor implements ResultSetExtractor<User> { 

    public User extractData(ResultSet resultSet) throws SQLException, DataAccessException { 

     User user = new User(); 

     user.setUserId(resultSet.getInt(1)); 
     user.setFirstName(resultSet.getString(2)); 
     user.setLastName(resultSet.getString(3)); 
     user.setGender(resultSet.getString(4)); 
     user.setCity(resultSet.getString(5)); 

     return user; 
    } 
} 
+0

'RowMapper'小於原始因此優選。 'ResultSetExtractor'用於'RowMapper'無法提供的用例。 –

+0

這對我來說很合理。在MVC模式中,您還可以創建一些可以放置渲染數據的webModel圖層。所以你的數據可以結合起來幷包含更多的對象,並且在你的jsp中你可以獲得該webModel並顯示它的值。 – RMachnik

+0

我不明白這與MVC有什麼關係,所以像spring-jdbc一樣被重新簽名。 – eis

回答

1

RowMapperResultSetExtractor之間的主要區別是什麼你的問題似乎忽略:

  • RowMapper產生每行的一個對象;
  • ResultSetExtractor每整個產生一個對象ResultSet

因此,如果一個結果行代表一個用戶,則ResultSetExtractor的返回類型不能爲User

一般來說,更喜歡RowMapper它可以支持你的用例。如果您的最終結果將是User對象的列表,則不需要手動對ResultSet進行迭代,將其添加到您必須創建的列表中,這就是您需要對ResultSetExtractor執行的操作。

1

根據你的情況RowMapper是一個更好的解決方案,考慮到像對象關係映射(ORM),JDO等等有更多的解決方案。但是在兩個給出的選擇中,RowMapper將在每個數據庫中提取數據,行的基礎上,成單個結果對象,所以對於輸出期望的迭代更少頭痛

結果集

表示數據庫結果集,這通常是通過執行查詢數據庫的語句產生的數據的一個表。

A ResultSet對象維護指向其當前數據行的光標。最初光標位於第一行之前。下一個方法將光標移動到下一行,並且當ResultSet對象中沒有更多行時它會返回false,它可以在while循環中用於遍歷結果集。

的RowMapper

使用的JdbcTemplate爲一個結果的映射行上的每行的基礎的接口。這個接口的實現執行將每行映射到結果對象的實際工作,但不需要擔心異常處理。 SQLExceptions將被調用JdbcTemplate捕獲和處理。

Ref Link 1

Ref Link 2

+0

我回滾了你的編輯問題,因爲它改變了原來的問題太多了--OP沒有正確使用rowmapper,這很明顯是基於發佈的原始代碼。 – eis