Отображение iBatis: отобразить строковое поле в список <String> - PullRequest
4 голосов
/ 22 апреля 2010

возможно ли отобразить строковое поле в определенном формате, например:

ааа, ГЭБ, ссс, ддд

в список, содержащий элементы [aaa, bbb, ccc, ddd] с использованием iBatis?

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

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

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

Спасибо Roberto

Ответы [ 3 ]

7 голосов
/ 22 апреля 2010

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

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

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

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

ОБНОВЛЕНИЕ: Конечно, если это преобразование необходимо только для одного поля одного класса, может быть проще определить пару альтернативных сеттеров / получателей getFieldOneAsString(), setFieldOneAsString() в вашем классе и использовать property="fieldOneAsString" в вашем отображении

3 голосов
/ 21 марта 2017

Использовать 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;
    }

}
0 голосов
/ 22 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...