2015-05-19 262 views
1

我有一個實體,我有一個EntityMapper映射實體具有的所有屬性。使用JDBI映射可選字段ResultSetMapper

然後,在我的DAO接口,我使用從DB

  • 有時所有實體的屬性@SqlQuery獲取 - >這是很好的
  • 但有時我只取某些屬性 - >和這裏的映射失敗「SQLException Column xxx not found」

這個問題的建議解決方案是什麼?我希望每個實體只有一個映射器,並且始終不會獲取所有attrs。

回答

0
private List<String> getFieldsPresentInResultSet(ResultSet rs) throws SQLException { 
     List<String> fieldsPresentInResultSet = new ArrayList<>(); 
     ResultSetMetaData metaData = rs.getMetaData(); 
     for(int index =1; index <= metaData.getColumnCount(); index++) { 
      fieldsPresentInResultSet.add(metaData.getColumnLabel(index)); 
     } 
     return fieldsPresentInResultSet; 
    } 

使用此函數可以獲取結果集中的所有字段。然後您可以檢查結果集中是否存在字段。類似的,

List<String> fields = getFieldsPresentInResultSet(rs); 
    String field = fieldfields.contain("fieldName") ? rs.getString("fieldName") ? null ; 

這樣你就可以有單個映射器每個實體。你也可以檢查這個library