昨天我们看过了使用 Kotlin DAO 进行资料库 CRUD 的方式。
今天我们来看看,除了基本的 CRUD,我们透过 DAO 还有什麽操作资料库的方式。
我们可以用 sortedBy()
进行资料的排序
transaction {
SchemaUtils.create(Users)
User.new {
cityId = 1
name = "Carol"
}
User.new {
cityId = 1
name = "Alice"
}
User.new {
cityId = 2
name = "Bob"
}
User
.all()
.sortedBy{ it.name }
.forEach{
println("name: ${it.name}")
}
}
印出的结果根据 User.name
的字母顺序排序,会是
name: Alice
name: Bob
name: Carol
如果我们希望反向排列,我们可以用 sortedByDescending()
User
.all()
.sortedByDescending{ it.name }
.forEach{
println("name: ${it.name}")
}
这样,我们的资料就会依照字母顺序反向排序了
name: Carol
name: Bob
name: Alice
有时候我们需要的资料型态,和资料库内实际储存的资料型态,可能是不太一样的。
如果每次我们在使用资料时,都要进行资料型态转换的话,会在很多地方撰写转换的逻辑,导致开发和维护上的困扰。
这时候,我们可以将资料转换定义在 DAO 里面,合并所有转换资料逻辑的位置。
比方说,我们希望 user.cityId
在资料库是整数,在程序里面固定是字串的话,我们可以利用 transform()
函数,来改写 User
类别
class User(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<User>(Users)
var cityId by Users.cityId.transform({ it.toInt() }, { it.toString() })
var name by Users.name
}
这样会导致程序里面的逻辑均要以字串处理,否则会无法编译成功
transaction {
SchemaUtils.create(Users)
User.new {
cityId = "1"
name = "Carol"
}
User.new {
cityId = "1"
name = "Alice"
}
User.new {
cityId = "2"
name = "Bob"
}
最後我们可以利用 javaClass.kotlin
参数,来看 cityId
拿到的型态
User
.all()
.first()
.let {
println(it.cityId.javaClass.kotlin)
}
执行程序後,我们会看到
class kotlin.String
代表我们撰写的程序内,cityId
确实被转换成字串型态了。
<<: Swift纯Code之旅 Day3. 「画面管理员 - TabbarController」
Microsoft AZ-303 Latest Exam Dumps - Published By ...
教材网址 https://coding104.blogspot.com/2021/06/java.h...
上一篇我们讲到ListView可以条列出不同的相似资料, 当我们列出ListView後想要点选换页或...
今天我们来谈谈网路的身分认证-Cognito 1. Cognito应用价值 现在的生活环境,不管是网...
今天我们要来使用zingChart的套件产出视觉化的图表 首先我们先在daily-tranction...