2017年05月, Google 在I/O’17 發布 Room,讓開發者在開發APP上對於資料庫的操作需求又多了一個選擇。
現在來作簡單的實作。
首先在
app gradle增加
apply plugin: 'kotlin-kapt'
//使用生成文件
kapt {
generateStubs = true
}
然後implementation下列資訊
implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
kapt "android.arch.persistence.room:compiler:1.1.1"
testImplementation "android.arch.persistence.room:testing:1.0.0"
ROOM組成元件
那麼我們分別建立3個class
Entity.kt
@Entity(tableName = "AppDataBase")
data class Entity constructor(@ColumnInfo(name = "id")
@PrimaryKey(autoGenerate = true)
var id: Int = 0,
@ColumnInfo(name = "name")
var name: String? = null
) {
constructor() : this(0)
}
這邊是定義資料表各項欄位屬性。
DAO.kt
@Dao
interface KotlinDao {
@Insert
fun insertKotlin(kotlin: Entity)
@Insert
fun insertKotlins(kotlins: List<Entity>)
@Query("select * from kotlin")
fun selectKotlin(): List<Entity>
}
這邊就是定義操作方法了,在這邊我們定義了insert跟query的方法。
Database.kt
@Database(entities = arrayOf(Entity::class), version = 1)
abstract class AppDataBase : RoomDatabase() {
abstract fun kotlinDao(): KotlinDao
companion object {
private var INSTANCE: AppDataBase? = null
fun getInstance(context: Context): AppDataBase {
if (INSTANCE == null) {
synchronized(AppDataBase::class) {
INSTANCE = Room.databaseBuilder(context,
AppDataBase::class.java,
AppDataBase::class.java.simpleName
).build()
}
}
return INSTANCE!!
}
}
}
這裡就是定義資料庫,這邊會作到資料庫物件維持單一實例,整個操作都是用同一個實體去操作,所以不會有搶奪資料庫資源情況發生。
然後在MainAvtivity下宣告
val appDb = AppDataBase.getInstance(this)
AsyncTask.execute {
appDb.clearAllTables() //清除表格內容
var list: List<Entity> = emptyList()
list += Entity(id = 1, name = "I am one")
list += Entity(id = 2, name = "I am two")
list += Entity(id = 3, name = "I am three")
list += Entity(id = 4, name = "I am four")
list += Entity(id = 5, name = "I am five")
appDb.kotlinDao().insertKotlins(list)
var kotlinlist = appDb.kotlinDao().selectKotlin()
Log.e("", "kotlinsize = " + kotlinlist.size)
for (i in 0 until kotlinlist.size) {
Log.d("SHOW", "kotlinData = " + kotlinlist[i])
}
}
這裡我們使用了一行 appDb.kotlinDao().insertKotlins(list)來完成insert動作。
我們傳入了一個list物件,其他就交由ROOM完成是不是很方便。
一個簡單的ROOM的實作就完成了