1.实体类
使用 @Entity
注解创建实体类:
@Entity
data class User(var name: String, var age: Int) {
/**
* 主键
*/
@PrimaryKey(autoGenerate = true)
var id: Long = 0
}
2.数据访问对象
使用@Dao
注解创建数据访问对象:
@Dao
interface UserDao {
@Insert
fun addUser(user: User): Long
@Update
fun updateUser(user: User)
@Delete
fun deleteUser(user: User)
@Query("delete from User where name = :name")
fun deleteUserByName(name: String)
@Query("select * from User")
fun getUsers(): List<User>
@Query("select * from User where age > :age")
fun getUsersByAge(age: Int): List<User>
}
3.数据库管理
使用@Database
注解创建数据库管理:
@Database(version = 1, entities = [User::class])
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private var instance: AppDatabase? = null
@Synchronized
fun getDatabase(context: Context): AppDatabase {
instance?.let {
return it
}
return Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
).build().apply {
instance = this
}
}
}
}
MainActivity:
private fun initView() {
mAddBtn = findViewById(R.id.first_add_btn)
mUpdateBtn = findViewById(R.id.first_update_btn)
mDeleteBtn = findViewById(R.id.first_delete_btn)
mSelectBtn = findViewById(R.id.first_select_btn)
mContentTv = findViewById(R.id.first_content_tv)
// 准备数据
val userDao = AppDatabase.getDatabase(this).userDao()
val user = User("Tom", 18)
mAddBtn.setOnClickListener {
thread {
user.id = userDao.addUser(user)
}
}
mUpdateBtn.setOnClickListener {
thread {
user.age = 20
userDao.updateUser(user)
}
}
mDeleteBtn.setOnClickListener {
thread {
userDao.deleteUser(user)
}
}
mSelectBtn.setOnClickListener {
thread {
userDao.getUsers().forEach {
Log.d("MainActivity", "用户:${it.id}\t${it.name}\t${it.age}")
}
}
}
}