Jetpack 之 Room 使用初体验
写在前面
本文开发环境为AndroidStudio 4.0 ,开发语言为kotlin,调试设备为OPPO Reno。
资料来自于一下链接。
Jetpack简介
其实早在2018年,Google就在I/O大会上发布了一系列的辅助工具包合集,称为Jetpack,主要包含四个方面。
- Architecture
- Foundation
- Behavior
- UI
根据图片可以看到几乎是涵盖Android开发的方方面面。我们只要学会使用其中的几个组件就能开发出架构很清晰的应用。在Android的官方demo中也是大量采用相关组件去做开发。关于这里面各模块的简单介绍可以参考这个点击前往。很重要的一点是Jetpack和Kotlin相结合真的是非常令人舒适。
Room初体验
前面简单介绍一下Jetpack,但本次重点还是简单说一下Room的使用体验,其实这玩意儿,Google 2017年就推出了。但是好像很少人用,反正我是2019年才知道,2020年才自己使用。用起来就一个字,爽!
简介
Room是Google 针对Android数据库操作封装的一个组件,Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。这个组件将数据库的建库建表升级,增删查改的代码全部都帮你在编译时去实现了。而你要做的就是写你的数据类,数据操作类Dao,数据库类Database。下面我们就看一个简单的示例,看看Room的魅力。
示例
下面你会觉得非常快,因为它用起来就是这么快。
添加依赖
在AndroidStudio(不会还有人用Eclipse吧 😄)中的build.gradle中添加Gradle依赖。通常情况下这个build.gradle文件指的是module下的那个文件。但是也有些项目配置的主module在project的build.gradle里面,所以看自己的用法。
apply plugin: 'kotlin-kapt'
dependencies {
implementation 'androidx.room:room-runtime:2.2.5'
implementation "androidx.room:room-ktx:2.2.5"
//这个是为了编译时根据注解生成代码
kapt 'androidx.room:room-compiler:2.2.5'
}
下面就可以愉快的,使用Room了。
数据类(表)的创建
如果我们设计一个需要使用到数据库的应用,首先我们肯定也是先设计表。来看一下用Room设计表。
@Entity(tableName = "people")
data class People(
@PrimaryKey @ColumnInfo(name = "name") val name: String,
@ColumnInfo(name = "age", defaultValue = "18") val age: Int, @ColumnInfo val address: String?
)
没错,我们的表建完了,并且我们的数据类也建好了,当列名和属性名一样是,甚至可以省略掉name。
数据库操作类(DatabaseWrapper)的创建
package com.wanghang.mypeople
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
@Dao
interface PeopleDao {
@Insert(onConflict = OnConflictStrategy.IGNORE, entity = People::class)
fun insertPeople(people: People)
@Query("SELECT * FROM people WHERE name= :name LIMIT 1")
fun getPeople(name: String): People
@Query("SELECT age FROM people WHERE name= :name LIMIT 1")
fun getPeopleAge(name: String)