Room 2.1.0及更高版本提供了数据库视图的支持,允许将查询封装到某个类中。Room 将这些支持查询的类称之为视图,并且在 DAO 中使用时跟普通数据对象一样。
Note:就像其他实体一样,可以对视图运行 SELECT 语句。但是,不能对视图运行 INSERT,UPDATE 以及 DELETE 语句
创建视图
要创建一个视图,在类上添加@DatabaseView注解,将注解值设置为视图对应的查询语句。
@DatabaseView("SELECT user.id, user.name, user.departmentId," +
"department.name AS departmentName FROM user " +
"INNER JOIN department ON user.departmentId = department.id")
data class UserDetail(
val id: Long,
val name: String?,
val departmentId: Long,
val departmentName: String?
)
将视图与数据库关联
为了将视图作为你 app 数据库的一部分,需要设置@Database注解的 views 属性
@Database(entities = arrayOf(User::class),
views = arrayOf(UserDetail::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}