iBatis映射:将字符串字段映射到List <string> </string>

时间:2010-04-22 09:43:43

标签: java sybase ibatis

是否可以使用特定格式映射字符串字段,如:

AAA,BBB,CCC,DDD

使用iBatis进入包含[aaa,bbb,ccc,ddd]元素的List?

我需要的是在我的模型中有类似的东西:

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

即使在我的表中,该字段也是一个简单的字符串。这可能吗?

由于 罗伯特

3 个答案:

答案 0 :(得分:7)

您可以通过CustomType Handler

来完成

例如,在您的映射中定义:

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

然后您对class StringSplitTypeHandlerCallBack implements TypeHandlerCallback进行编码,该String.split()会在getResult()方法中调用getFieldOneAsString(), setFieldOneAsString()

更新:当然,如果此转换只需要一个类的一个字段,那么在您的类中定义一对替代的setter / getters property="fieldOneAsString"可能会更简单,并使用{{1}你的映射

答案 1 :(得分:3)

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

}

答案 2 :(得分:0)


我不确定您为什么要iBatis这样做,但您可以使用String.split()来完成工作,并映射结果。