2010-04-22 94 views
4

是有可能的字符串字段中包含一個特定的格式映射:iBatis的映射:一個字符串字段映射到一個列表<String>

AAA,BBB,CCC,DDD

成列表具有元素[AAA ,bbb,ccc,ddd]使用iBatis?

我需要的是有在我的模型是這樣的:

public class Request{ 
    private List<String> fieldOne; 
    public List<String> getFieldOne(){....} 
    public void setFieldOne(){....} 
} 

即使在我的表中的字段是一個簡單的字符串。這可能嗎?

感謝 羅伯託

回答

5

你可以做到這一點通過CustomType Handler

例如,在你的映射定義:

<result column="FIELD_ONE" property="fieldOne" 
     jdbcType="VARCHAR" typeHandler="com.xxx.StringSplitTypeHandlerCallBack" /> 

,然後你的代碼你class StringSplitTypeHandlerCallBack implements TypeHandlerCallback,這將調用String.split()getResult()方法內。

更新:當然,如果這種轉換隻需要一個類的一個領域,它可能是更簡單的在你的類定義一對替代的setter /吸氣getFieldOneAsString(), setFieldOneAsString(),並在你的映射使用property="fieldOneAsString"

0

我不知道你爲什麼要iBatis的做到這一點,但你可以只使用String.split()做的工作,並將結果地圖。

+0

是的,我知道怎麼做,在Java端,我只是想知道是否有可能做到這一點自然而然與ibatis一起 – Roberto 2010-04-22 10:53:33

2

使用類型處理器,例如:

<result property="strList" column="rp_str" typeHandler="com.yourproject.repository.orm.StringSplitTypeHandler" /> 

public class StringSplitTypeHandler implements TypeHandler<List<String>> { 

    @Override 
    public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException { 
     if (parameter != null) { 
      ps.setString(i, parameter.toString()); 
     } 
    } 

    @Override 
    public List<String> getResult(ResultSet rs, String columnName) throws SQLException { 
     String columnValueStr = rs.getString(columnName); 
     if (columnValueStr != null) { 
      return Arrays.asList(columnValueStr.replaceAll("[ ]", "").split(",")); 
     } 
     return null; 
    } 

    @Override 
    public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException { 
     String columnValueStr = rs.getString(columnIndex); 
     if (columnValueStr != null) { 
      return Arrays.asList(columnValueStr.replaceAll("[ ]", "").split(",")); 
     } 
     return null; 
    } 

    @Override 
    public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException { 
     String columnValueStr = cs.getString(columnIndex); 
     if (columnValueStr != null) { 
      return Arrays.asList(columnValueStr.replaceAll("[ ]", "").split(",")); 
     } 
     return null; 
    } 

}