iBatis映射:将字符串字段映射到List

发布于 2024-08-30 00:41:05 字数 357 浏览 8 评论 0原文

是否可以使用 iBatis 将具有特定格式的字符串字段(如:

aaa、bbb、ccc、ddd)

映射到包含元素 [aaa、bbb、ccc、ddd] 的列表中?

我需要的是在我的模型中具有类似的内容:

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

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

谢谢 罗伯托

is it possible to map a string field with a particular format like:

aaa,bbb,ccc,ddd

into a List having elements [aaa, bbb, ccc, ddd] using iBatis?

What I need is to have in my model something like:

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

even if in my table the field is a simple string. Is this possible?

Thanks
Roberto

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

蓝戈者 2024-09-06 00:41:05

您可以通过 CustomType 处理程序来完成此操作

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

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

然后编写您的 类 StringSplitTypeHandlerCallBack 实现 TypeHandlerCallback ,这将在 内部调用 String.split() >getResult() 方法。

更新:当然,如果这种转换只需要一个类的一个字段,那么在类中定义一对替代的 setter/getter getFieldOneAsString(), setFieldOneAsString() 可能会更简单,并在映射中使用 property="fieldOneAsString"

You can do it through a CustomType Handler:

For example, in your mapping you define:

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

and then you code your class StringSplitTypeHandlerCallBack implements TypeHandlerCallback , which would call String.split() inside the getResult() method.

UPDATE: Of course, if this conversion is only need for one field of one class, it might be more simple to define a pair of alternative setter/getters getFieldOneAsString(), setFieldOneAsString() in your class, and use property="fieldOneAsString" in your mapping

毁虫ゝ 2024-09-06 00:41:05

使用类型处理程序,示例:

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

}

Use TypeHandler, Example:

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

}
木緿 2024-09-06 00:41:05

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


I'm not sure why you want iBatis to do it, but you could just use String.split() to do the work, and map the results.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文