面试题答案
一键面试import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.Transaction
@Database(entities = [TableA::class, TableB::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun tableADao(): TableADao
abstract fun tableBDao(): TableBDao
@Transaction
open fun performTransaction() {
tableADao().insert(TableA())
tableBDao().update(TableB())
}
}
@Dao
interface TableADao {
@Insert
fun insert(tableA: TableA)
}
@Dao
interface TableBDao {
@Update
fun update(tableB: TableB)
}
data class TableA(
// 定义表A的字段
)
data class TableB(
// 定义表B的字段
)
在上述代码中:
AppDatabase
是定义数据库的抽象类,包含两个Dao
的抽象方法。performTransaction
方法标记为@Transaction
,意味着其中的操作会作为一个事务执行,要么全部成功,要么全部失败。TableADao
和TableBDao
分别定义了对表A和表B的操作方法。TableA
和TableB
是对应表的实体类。
使用时,通过 AppDatabase
的实例调用 performTransaction
方法即可执行该事务。例如:
val database = Room.databaseBuilder(
context,
AppDatabase::class.java,
"app-database"
).build()
database.performTransaction()