JdbcClient单个参数绑定多个同名SQL占位符的可行性问询
JdbcClient单个参数绑定多个同名SQL占位符的可行性问询
没问题,我来给你把这个事儿说清楚!
答案是完全支持!JdbcClient的命名参数绑定机制,本来就允许你用单个.param()调用,把同一个参数值绑定到SQL语句中所有同名的:name占位符上,根本不需要为每个重复的占位符单独调用一次.param()。
你给出的这段代码(除了小笔误之外)是完全可以正常工作的:当你通过.param("foo", foo)绑定参数后,SQL里的colA = :foo和colB = :foo这两个位置,都会被正确替换为你传入的"bar"值,执行的时候不会出现参数未绑定的错误,查询逻辑也完全符合预期。
给你修正下代码里的小笔误(原代码里把变量名写错成bar了),正确的写法应该是这样:
String query, foo; List<Map<String, Object>> result; query = "SELECT * FROM table WHERE colA = :foo OR colB = :foo"; foo = "bar"; result = jdbcClient .sql(query) .param("foo", foo) .query() .listOfRows();
其实JdbcClient底层是基于Spring的NamedParameterJdbcTemplate实现的,而这个模板本身就设计支持重复的命名参数——它会在预处理阶段把所有同名的占位符映射到同一个绑定值上,既简洁又能避免重复绑定的代码冗余。我自己在实际项目里也经常这么写,完全没出过问题,放心用就行!
内容来源于stack exchange
相关产品推荐
相关产品推荐

