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
相关产品推荐
相关产品推荐

