5

次のような特定の形式で文字列フィールドをマップすることは可能ですか?

aaa、bbb、ccc、ddd

iBatisを使用して要素[aaa、bbb、ccc、ddd]を持つリストに追加しますか?

私が必要としているのは、モデルに次のようなものを含めることです。

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

私のテーブルでは、フィールドが単純な文字列であっても。これは可能ですか?

ありがとうロベルト

4

3 に答える 3

8

CustomTypeハンドラーを介してそれを行うことができます:

たとえば、マッピングで次のように定義します。

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

次に、メソッド内でclass StringSplitTypeHandlerCallBack implements TypeHandlerCallback呼び出すをコーディングします。String.split()getResult()

更新:もちろん、この変換が1つのクラスの1つのフィールドにのみ必要な場合は、クラスで代替のセッター/ゲッターのペアを定義し、マッピングgetFieldOneAsString(), setFieldOneAsString()で使用する方が簡単な場合がありますproperty="fieldOneAsString"

于 2010-04-22T18:53:41.123 に答える
5

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

}
于 2017-03-21T09:02:41.447 に答える
0

なぜiBatisにそれをさせたいのかわかりませんが、String.split()を使用して作業を行い、結果をマッピングすることができます。

于 2010-04-22T10:45:29.797 に答える