JOOQ总和字段值:BigDecimal到Int
我使用postgres的数值字段。 JOOQ把它变成BigDecimal
。 我的JOOQ查询是:
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问题更多的kotlin问题。
就在这里。 刚才重复使用你的列引用:
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度)。
在3.10中,您也可以使用新的Kotlin解构支持,其中Record2<String, BigDecimal>
可以如下解构:
val (id, sum) = record;