You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jdbi3中如何使用bindBean()绑定SQL中重复出现的字段?

解决Jdbi bindBean()绑定重复命名参数的问题

问题原因

你的SQL中使用下划线格式的参数名(:field_two、:field_one),但MyBean的属性是驼峰格式(fieldTwo、fieldOne)。Jdbi的bindBean()默认严格按照属性名匹配SQL参数名,因此无法识别:field_two对应的属性,导致重复出现的:field_two参数绑定失败。

解决方案

方案1:统一SQL参数名与Bean属性名

修改SQL中的参数名,使其与Bean的驼峰属性名一致:

String updateSql = "UPDATE table_name SET field_two = :fieldTwo"
                + " WHERE field_one = :fieldOne AND field_two <> :fieldTwo";
handle.createUpdate(updateSql)
    .bindBean(myBean)
    .execute();

bindBean()会自动将myBean的fieldTwo属性值绑定到所有:fieldTwo参数,无论出现多少次。

方案2:通过注解指定参数映射

如果不想修改SQL,可在Bean属性上添加@Bind注解,明确指定对应的SQL参数名:

@Data
public class MyBean {
   @Bind("field_one")
   private String fieldOne;
   @Bind("field_two")
   private String fieldTwo;
}

原SQL无需修改,bindBean()会根据注解将属性映射到对应的下划线参数,重复出现的:field_two也会被正确绑定。

方案3:配置全局参数名映射策略

若项目中有大量驼峰属性与下划线参数的映射需求,可配置Jdbi全局命名策略,自动将驼峰属性名转换为下划线格式的参数名:

Jdbi jdbi = Jdbi.create(dataSource);
// 配置驼峰转下划线的参数映射策略
jdbi.getConfig(BeanMapperFactory.class).setCaseStrategy(CaseStrategy.LOWER_CAMEL_TO_LOWER_UNDERSCORE);

配置后,bindBean()会自动将fieldTwo映射到:field_two,无需修改SQL或添加注解。

内容的提问来源于stack exchange,提问作者EzyHoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:15:57