2010-04-22 10 views
4

возможно отобразить поле строки с определенным форматом, как:Ibatis: привяжите строковое поле в список <String>

ааа, ГЭБ, КТС, ДДД

в список, имеющие элементы [ааа , bbb, ccc, ddd] с помощью iBatis?

Что мне нужно, чтобы в моей модели что-то вроде:

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

даже если в моей таблице поле является простой строкой. Это возможно?

Благодаря Roberto

ответ

5

Вы можете сделать это через CustomType Handler:

Например, в вашем отображении вы определяете:

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

, а затем вы закодировать ваш class StringSplitTypeHandlerCallBack implements TypeHandlerCallback, который будет вызывать String.split() внутри метода getResult().

UPDATE: Конечно, если это преобразование нужно только для одного поля одного класса, это может быть более простым, чтобы определить пару альтернативных инкубационные/добытчиками getFieldOneAsString(), setFieldOneAsString() в своем классе, и использовать property="fieldOneAsString" в вашем отображении

0

Я не знаю, почему вы хотите Ibatis, чтобы сделать это, но вы могли бы просто использовать String.split(), чтобы сделать работу, и сопоставить результаты.

+0

да я знаю, как сделать это на Java стороне, я просто хотел бы знать, если это будет возможно сделать это автообновления с ибатисом – Roberto

2

Использование TypeHandler, пример:

<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; 
    } 

}