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

