Room

定义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<User> 
 
    @Query("select * from User where age > :age") 
    fun loadUsersOlderThan(age: Int): List<User> 
 
    @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()) 
                } 
            } 
        } 
    } 
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值