gpt4 book ai didi

kotlin - 避免使用JetBrains Exposed在插入和更新语句中重复代码

转载 作者:行者123 更新时间:2023-12-02 13:28:45 27 4
gpt4 key购买 nike

我在一个新项目中使用了Exposed,并且注意到对于插入和更新语句,我必须复制记录值的所有分配。
一个例子:

val orderId = Orders.insert {
it[orderType] = orderDTO.orderType
it[deliveryDateTime] = LocalDateTime.of(
LocalDate.parse(orderDTO.deliveryDate),
LocalTime.parse(orderDTO.deliveryTime)
)
it[customerName] = orderDTO.customerName
it[customerPhone] = orderDTO.customerPhone
it[customerAddress] = orderDTO.customerAddress

// ... other fields
} get Orders.id


Orders.update({ Orders.id eq orderId }) {
it[orderType] = orderDTO.orderType
it[deliveryDateTime] = LocalDateTime.of(
LocalDate.parse(orderDTO.deliveryDate),
LocalTime.parse(orderDTO.deliveryTime)
)
it[customerName] = orderDTO.customerName
it[customerPhone] = orderDTO.customerPhone
it[customerAddress] = orderDTO.customerAddress

// ... other fields
}
我试图提取lambda或函数中的常见分配,但在第一种情况下,主体的类型为 T.(InsertStatement<Number>)->Unit,而在更新中,主体的类型为 T.(UpdateStatement)->Unit,因此我看不到实现此目的的简便方法。
我是否缺少某些东西,或者是设计使然?

最佳答案

也许您可以执行以下操作:该函数具有可从lambda调用的通用输入参数:

fun Orders.insertOrUpdate(it: UpdateBuilder<Number>, orderDTO: OrderDTO) {
it[orderType] = orderDTO.orderType
it[deliveryDateTime] = LocalDateTime.of(
LocalDate.parse(orderDTO.deliveryDate),
LocalTime.parse(orderDTO.deliveryTime)
)
it[customerName] = orderDTO.customerName
it[customerPhone] = orderDTO.customerPhone
it[customerAddress] = orderDTO.customerAddress
}

val orderId = Orders.insert { insertOrUpdate(it, orderDTO) } get Orders.id

Orders.update { insertOrUpdate(it, orderDTO) }

关于kotlin - 避免使用JetBrains Exposed在插入和更新语句中重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62580238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com