使用mybatis将POJO项目数组传递给存储过程?

时间:2017-04-10 22:06:00

标签: java sql stored-procedures mybatis

我有以下java类:

public class item implements Serializable {    

    private long id;
    private String name;    

    public long getUuid() {
        return id;
    }    

    public void setId(long id) {
        this.id = id;
    }    

    public String getName() {
        return this.name;
    }    

    public void setName(String name) {
        this.name = name;
    }    
}

让我们假设我有一个这样的数组 - 我有一个存储过程可以迭代一个集合 - 称为" @ pItemsToProcess"。

我需要做些什么才能让我的存储过程占用这个数组?

所以我需要编写某种类型的处理程序?如果是这样,那会是阵列吗? "项目"类?既?

我已经看到其他用户对此提出了类似的问题 - 但对于任何问题,似乎都不是一个可行的解决方案。

我也愿意让DB团队一次更改存储过程以使用一个项目,并且如果更容易,则使用每个项目调用proc?因为这个proc只能每天调用一次,大约有20个项目,所以它不会对延迟敏感,我们也不担心负载。

此行以下的编辑! ----------

数据库类型是SQL服务器。

1 个答案:

答案 0 :(得分:0)

如果DB是SQL服务器,我已经回答了same question

修改

链接Table-Valued Parameter的锚似乎不起作用,有趣的片段在将表值参数作为SQLServerDataTable对象传递一章中。

类型处理程序是一种参数限定符。它用于每个参数但通常未指定,因为Mybatis根据默认映射类型=>解析类型处理程序以使用匹配参数类型类型控制器。通常指定TypeHandler使用自定义类型处理程序来处理复杂类型的实现特定行为。

在我提到的答案中,我并没有完全解决OP的情况,而是将所有部分放在一起:

Type handler example是关于将SQL ARRAY传递给Oracle DB的。然后解决方案是调整以传递SQL-Server 表值参数