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

JooQ:如何通过Fluent模式初始化并保存记录?

在JooQ中实现Fluent风格初始化并保存记录

你的问题出在JooQ的store()方法返回值是int(代表受影响的行数),而非Record对象本身,所以链式调用到store()时,无法把结果赋值给Record类型的变量。这里有几种可行的实现方式:

方式一:拆分调用(最直接)

先构建并初始化Record,再单独调用store()方法:

var resultRecord = dslContext.newRecord(TBL1)
    .setField1("Hello")
    .setField2("World");
resultRecord.store();

这样resultRecord就能拿到初始化后的记录,后续还能获取它的字段值(包括自增主键这类数据库生成值)。

方式二:用DSL插入语句配合returning()(更贴合Fluent风格)

如果想要全程链式调用,同时需要获取插入后的完整记录(比如包含数据库自动生成的主键),可以用JooQ的DSL插入API:

var resultRecord = dslContext.insertInto(TBL1)
    .set(TBL1.FIELD1, "Hello")
    .set(TBL1.FIELD2, "World")
    .returning()
    .fetchOne();

returning()会让JooQ返回插入后的完整记录,fetchOne()直接获取这条记录,完全符合链式调用的习惯。

补充说明

JooQ设计store()返回int是因为该方法本质是执行增/改操作,返回受影响行数是JDBC的常规行为。如果只是保存记录并保留原对象,拆分调用足够;如果需要获取数据库生成的字段值,第二种方式更实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:09