【问题标题】:Pass Array of POJO items to a stored procedure using mybatis?使用 mybatis 将 POJO 项数组传递给存储过程?
【发布时间】:2017-04-10 22:05:59
【问题描述】:

我有以下 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”。

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

所以我需要编写某种类型的处理程序?如果是这样,它会用于数组吗? “项目”类?两者都有?

我看到其他用户提出了类似的问题 - 但似乎没有任何问题的有效解决方案。

我也愿意让数据库团队更改存储过程以一次处理一个项目,并为每个项目调用 proc 是否更容易?因为这个 proc 每天只会被调用一次,大约有 20 个项目,所以它对延迟不敏感,我们也不担心负载。

在此行下方进行编辑! ----------

数据库类型是 SQL 服务器。

【问题讨论】:

  • 存在解决方案,它们确实依赖于类型处理程序,但实现是特定于 DB 供应商驱动程序的,您介意在问题中添加此信息吗?
  • 添加信息:)

标签: java sql stored-procedures mybatis


【解决方案1】:

如果DB是SQL server,我已经回答了same question

编辑

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

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

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

Type handler example 是关于将 SQL 数组传递给 Oracle DB。然后解决方案是调整它以传递 SQL-Server Table-Valued Parameter

【讨论】:

  • 我昨天在搜索时看到了这个解决方案 - 是的 - 数据库是 SQL 服务器 - 我可以完全理解你点击过程的 xml 部分,并将其交给列表 - 但是我不明白如何为此编写类型处理程序?我写它是为了一个列表吗?我是为“项目”类写的吗?也许我两个都这样做?
  • 我是否在其他人的问题的示例中遗漏了什么?我根本看不到类型处理程序的工作原理。
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 2016-04-27
  • 2010-11-07
  • 2014-08-29
  • 1970-01-01
  • 2015-01-02
相关资源
最近更新 更多