java sql object_java – 如何使用JDBI的Sql Object API在运行时创建动态Sql查询?

我一直在将现有项目从jdbc转移到jdbi,而且我一直在使用jdbi的漂亮SQL Object API.我们正在使用mysql.

虽然SQL Object API可以构造在编译时已知的已处理查询,但我找不到在运行时生成查询的方法.

具体来说,我希望能够做到这样的事情:

@SqlUpdate(

"UPDATE record SET "+

@IfNotZero("foo") "foo=:foo" +

@IfNotNull("bar") "bar=:bar" +

@IfNotNull("baz") "baz=:baz" +

"WHERE id=:id"

)

public abstract int updateRecord(

@Bind("id") int id,

@Bind("foo") int foo,

@Bind("bar") String bar,

@Bind("baz") String baz

);

解决方法:

JDBI不太适合构建动态查询. IMO这个库的重点是尽可能地分离代码和SQL查询.

但是,您的特定情况可能通过SQL解决:

COALESCE(:foo, foo)

如果’foo’是表中列的名称,并且:foo将解析为NULL,那么mysql SET将是有效的

SET foo=foo

即它什么都不做(在你的情况下,这是不可取的).如果:foo不为null,它将等效于

SET foo=:foo

标签:java,sql,mysql,jdbi

来源: https://codeday.me/bug/20190725/1533233.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值