发布
社区首页 >问答首页 >如何使用JDBI 3中的列表绑定Bean参数

如何使用JDBI 3中的列表绑定Bean参数
EN

Stack Overflow用户
提问于 2019-07-16 20:47:01
回答 1查看 4.6K关注 0票数 2

我试图使用SqlObject API在Postgres中存储Bean的列表。我的界面看起来如下:

代码语言:javascript
代码运行次数:0
复制
@UseClasspathSqlLocator
@RegisterBeanMapper(SomeBean.class)
public interface LeadStateDao {

    @SqlUpdate
    @GetGeneratedKeys
    SomeBean update(@BindBean SomeBean bean);

    @SqlUpdate
    @GetGeneratedKeys
    SomeBean upsert(@BindBean SomeBean bean);

    @SqlUpdate
    @GetGeneratedKeys
    int[] batchUpsert(@BindList List<SomeBean> beans);

}

我正在使用参数进行编译,这就是为什么我没有显式命名参数的原因(这很好)。updateupsert方法可以正常工作,这要归功于@RegisterBeanMapper。但是batchUpsert没有,我得到了:

java.lang.UnsupportedOperationException:没有参数工厂为类com.foo.SomeBean类型的“com.foo.SomeBean@49d11f58”注册

是否有一种方法可以将bean绑定为参数,作为列表的一部分,而不必编写自定义参数工厂?医生们在这里非常模糊:

java.util.Collection和Java数组(存储为SQL数组)。根据数组元素的类型,可能需要一些额外的设置。

不确定“一些附加设置”意味着什么。

EN

回答 1

Stack Overflow用户

发布于 2019-07-18 06:27:34

我从未像这样使用@BindList (用于批量操作),也不知道它是否适合与bean一起使用。

正如医生们所说:

绑定值列表是通过@BindList注释完成的。这将以'a,b,c,d,…​‘的形式展开列表。注意,这个注释要求您使用表示法,不像@Bind (它使用:binding)

所以如果你有

代码语言:javascript
代码运行次数:0
复制
@BindList List<Long> data

作为接口中的参数,您必须使用

代码语言:javascript
代码运行次数:0
复制
select * from my_data where id in (<data>)

作为查询(注意括号而不是冒号)。我怀疑你根本不能用它来搭配豆子!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57065208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档