通过Room可最大限度减少重复和容易出错的SQL代码
在build.gradle(:app)中进行如下设置
dependencies {
def room_version = "2.4.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
kapt "androidx.room:room-compiler:$room_version"
}
plugins {
id 'kotlin-kapt'
}
@Entity
data class User(
@PrimaryKey(autoGenerate = true) val id: Int,
@ColumnInfo(name = "name") val name: String
)
@Entity指定一个实体类
@PrimaryKey指定主键(autoGenerate自动增长,赋值时指定为0即可)
@ColumnInfo指定一个列,name为列名
@Dao
interface UserDao
{
@Insert
fun insert(user: User)
@Delete
fun delete(user: User)
@Update
fun update(user: User)
@Query("SELECT * FROM User")
fun getAllUser() : List
}
@Insert指定插入方法,插入insert方法参数的实体,也就是user
@Delete指定删除方法,删除delete方法参数的实体,也就是user
@Update指定更新方法,更新update方法参数的实体,也就是user
@Query(编写SQL语句)指定自定义方法,例如查询
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase()
{
abstract fun getUserDao() : UserDao
}
@Database指定数据库类(entities指定数据库中的实体,可有多个)
getUserDao用来获取操作数据库的Dao类,如果有多个表,只需添加 对应的获取Dao方法即可
//"User"为数据表名,表不存在时会自动创建
val database = Room.databaseBuilder(applicationContext,AppDatabase::class.java,"User")
.build()
val dao = database.getUserDao()
通过获取到的Dao实例即可操作数据库
(注意:因为数据库操作是耗时操作,所以不允许在主线程中执行)
Runnable {
dao.insert(User(0, "user1"))
val userList = dao.getAllUser()
}.run()