定义Entity(实体类)
@Entity data class User(var firstName: String, var lastName: String, var age: Int) { @PrimaryKey(autoGenerate = true) var id: Long = 0 }
定义Dao
dao层的目的是覆盖所有业务需求,使得用户不必与底层数据库打交道。
@Dao interface UserDao { @Insert fun insertUser(user: User): Long @Update fun updateUser(newUser: User) @Query("select * from User") fun loadAllUsers(): List@Query("select * from User where age > :age") fun loadUsersOlderThan(age: Int): List @Delete fun deleteUser(user: User) @Query("delete from User where lastName = :lastName") fun deleteUserByLastName(lastName: String): Int // 去数据库查询 }
定义Database
@Database(version = 1, entities = [User::class]) // 指明数据库的版本号和支持的哪些实体类 abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao // 获取Dao实例 companion object { private var instance: AppDatabase? = null @Synchronized fun getDatabase(context: Context): AppDatabase { instance?.let { return it } // 用instance缓存,如果存在就返回不存在就创建database实例 return Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "app_database") .build().apply { instance = this } } } }
使用
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { val userDao = AppDatabase.getDatabase(this).userDao() val user1 = User("Tom", "Brady", 40) val user2 = User("Tom", "Hanks", 63) addDataBtn.setOnClickListener { thread { user1.id = userDao.insertUser(user1) user2.id = userDao.insertUser(user2) // insertUser的返回值是主键id } } updateDataBtn.setOnClickListener { thread { user1.age = 42 userDao.updateUser(user1) } } deleteDataBtn.setOnClickListener { thread { userDao.deleteUserByLastName("Hanks") } } queryDataBtn.setOnClickListener { thread { for (user in userDao.loadAllUsers()) { Log.d("MainActivity", user.toString()) } } } } }
还没有评论,来说两句吧...