假设我有一个带有名称列(String
)和年龄列(Int
)的RDBMS表persons
。如果我们不需要服务器端的ID,则可以完全适合case class Person(name: String, age: String)
。问题在于,在某些情况下,我们有ID,例如当我们从DB(后端)中找到人时,但是有时我们没有像以形式创建人(前端)一样。
我看到的三种最简单的方法:
- 使用转换创建不同的类
FrontendPerson
和BackendPerson
。非常样板,没有直接连接 - 添加包装器
DbItem(id: Long, person: Person)
- 添加
id: Option[Long]
。也非常样式板,在大多数情况下,我们知道id
可用,因此Option#get
将传播。
我想知道是否有更好的(可能更通用,无形)或整合到Doobie方式中。
使用默认参数有一个技巧:
case class Person(name: String, age: Int, id: Long = 0L)
因为id
列在案例类的末尾存在,并且具有默认值,因此您可以有效地忽略它。例如,您可以创建IT的实例id
。
这仅在:
时才真正有意义id
是数据库中的自动列,因此您永远不必自己管理。Person
的实例是从数据库中提取的,因此id
字段将被填充用于使用它的任何人。
它解决了您的大多数问题。但是... 1至 @triggernz的链接tpolcat演示的链接,以攻击此攻击的原则方法。