[Day 08] Kotlin DAO 其他和资料库互动的方式

昨天我们看过了使用 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」

>>:  [Day13] 策略最佳化模组改造(3)

Microsoft AZ-303 Latest Exam Dumps - Published By Microsoft professionals

Microsoft AZ-303 Latest Exam Dumps - Published By ...

[Java Day15] 4.3. 参数

教材网址 https://coding104.blogspot.com/2021/06/java.h...

[Android Studio 30天自我挑战] ListView点选後动作

上一篇我们讲到ListView可以条列出不同的相似资料, 当我们列出ListView後想要点选换页或...

Day 28 网路身分认证-Cognito

今天我们来谈谈网路的身分认证-Cognito 1. Cognito应用价值 现在的生活环境,不管是网...

Angular Stock上市个股日成交(三)(Day29)

今天我们要来使用zingChart的套件产出视觉化的图表 首先我们先在daily-tranction...