JOOQ总和字段值:BigDecimal到Int
我使用的postgres的值域为numeric
。 JOOQ将其变为BigDecimal
。我JOOQ查询:JOOQ总和字段值:BigDecimal到Int
val sumField = DSL.sum(TABLE.VALUE)
val query = dsl().select(TABLE.id.`as`("id"), sumField.`as`("sum"))
.from(TABLE)
.groupBy(TABLE.id)
.fetch()
.map{
record -> SumById(
id = record.get("id").toString(),
sum = record.get("sum").toString().toInt()
)
}
其中SumById
是id
和sum
字段的数据类:
data class SumById (val id: String, val sum: Int)
我可以做.toString().toInt()
得到Int
总和。但我想知道是否有更好的方法将BigDecimal
变成Int
。
PS
我想这是一个多JOOQ问题上科特林问题。
是的,有。刚刚从早期的重用你的专栏referenes:
record -> SumById(
id = record.get(TABLE.id.`as`("id")),
sum = record.get(sumField.`as`("sum"))
)
或者,你可以存储那些局部变量为好。另一种选择是使用Record2.value1()
和Record2.value2()
record -> SumById(
id = record.value1(),
sum = record.value2()
)
...作为类型信息通过在您的查询的jOOQ API保持(最高程度的22个,至少)。
在jOOQ 3.10,您可能还可以使用新的科特林解构的支持,其中Record2<String, BigDecimal>
可以解构为:
val (id, sum) = record;
对不起,我忘了提及数据库是postgresql,而'TABLE.VALUE'的类型是'TableField
@breezymri:Java的'BigDecimal'类型有一个你可以使用的'intValue()'方法。 –
什么是'record.get(字符串)返回的类型' ? – jrtapsell
您可以为“记录”类定义自定义扩展方法。阅读会更好。 –