2015-05-19 263 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