快速了解Android Room使用细则

2、添加依赖

1

2

3

dependencies {

    implementation "androidx.room:room-ktx:2.4.0"

}

2、Entity

Entity是指代表数据库中的表的类,可以使用注解来定义表中的列。一个Entity类应该至少有一个主键字段,并且可以包含其他字段,如下面的例子所示:

1

2

3

4

5

6

@Entity(tableName = "user")

data class User(

    @PrimaryKey val id: Int,

    @ColumnInfo(name = "name") val name: String,

    @ColumnInfo(name = "email") val email: String

)

3、DAO

DAO是指数据访问对象,用于定义访问数据库的方法。可以使用注解来指定SQL查询,也可以使用Room提供的一些查询方法。例如,以下是一个包含一些基本查询的DAO示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@Dao

interface UserDao {

    @Query("SELECT * FROM user")

    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE id = :id")

    fun getById(id: Int): User?

    @Insert

    fun insert(user: User)

    @Update

    fun update(user: User)

    @Delete

    fun delete(user: User)

}

4、Database

Database是指数据库对象,包含与数据库相关的配置信息,如版本号和实体类的列表。可以使用注解来指定数据库的配置信息和包含的实体类,如下面的例子所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

@Database(entities = [User::class], version = 1)

abstract class AppDatabase : RoomDatabase() {

    abstract fun userDao(): UserDao

    companion object {

        private var INSTANCE: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {

            return INSTANCE ?: synchronized(this) {

                val instance = Room.databaseBuilder(

                    context.applicationContext,

                    AppDatabase::class.java,

                    "app_database"

                ).build()

                INSTANCE = instance

                instance

            }

        }

    }

}

5、获取DAO实例

使用Database对象的实例方法获取DAO接口的实例

1

2

val db = AppDatabase.getInstance(context)

val userDao = db.userDao()

6、调用DAO方法

使用DAO接口的实例方法来访问数据库

1

2

3

4

5

6

7

val users = userDao.getAll()

val user = userDao.getById(1)

val newUser = User(2, "鸡你太美", "jinitaimei@qq.com")

userDao.insert(newUser)

newUser.email = "jinitaimei@qq.com"

userDao.update(newUser)

userDao.delete(newUser)

7、使用步骤

以上是Room的三个主要组成部分,下面是使用Room的一些基本步骤:

  • 添加依赖项:在项目的build.gradle文件中添加Room库的依赖项。
  • 创建Entity类:创建一个或多个Entity类来表示数据库中的表。
  • 创建DAO接口:创建一个或多个DAO接口来定义访问数据库的方法。
  • 创建Database对象:创建一个继承自RoomDatabase的抽象类来表示数据库对象,并使用@Database注解指定数据库的配置信息和包含的实体类。
  • 获取DAO实例:使用Database对象的实例方法获取DAO接口的实例。
  • 调用DAO方法:使用DAO接口的实例方法来访问数据库。

下面说点其他的,嘻嘻

8、事务(Transaction)

在对数据库进行多次操作时,可以使用事务来保证数据的一致性和完整性。在Room中,可以使用@Transaction注解来指定一个方法是事务,例如:

1

2

3

4

5

@Transaction

fun updateUserData(user: User, address: Address) {

    userDao.update(user)

    addressDao.update(address)

}

9、数据库迁移

当你需要修改数据库架构时,可以使用Room的数据库迁移功能来升级或降级数据库。在Room中,可以使用@Database注解中的version属性来指定数据库版本号,如果你需要进行迁移,你可以创建一个Migration对象,它包含了旧版本到新版本的变化信息,并将其添加到@Database注解中的migrations属性中,例如:

1

2

3

4

5

6

7

8

@Database(entities = [User::class], version = 2, exportSchema = false,

    migrations = [Migration(1, 2) { database ->

        database.execSQL("ALTER TABLE user ADD COLUMN phone TEXT NOT NULL DEFAULT ''")

    }]

)

abstract class AppDatabase : RoomDatabase() {

    // ...

}

10、视图(View)

在一些情况下,你可能需要使用多个表中的数据来创建一个视图(数据库视图!不是android.view)。在Room中,你可以使用@DatabaseView注解来定义一个视图,并使用@Query注解来指定视图的查询语句,例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@DatabaseView(

    "SELECT user.id, user.name, address.city, address.country FROM user " +

    "INNER JOIN address ON user.address_id = address.id"

)

data class UserAddress(

    val id: Int,

    val name: String,

    val city: String,

    val country: String

)

@Dao

interface UserAddressDao {

    @Query("SELECT * FROM user_address")

    fun getAll(): List<UserAddress>

}

11、Flow!

实际上也支持RXJava,但是我不喜欢RX,可以结合Room、Flow和网络请求,做很酷的事情

1

2

3

4

5

6

7

8

@Dao

interface UserDao {

    @Query("SELECT * FROM user WHERE id = :id")

    fun getById(id: Int): Flow<User>

    @Query("SELECT * FROM user")

    fun getAll(): Flow<List<User>>

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinat_40572875

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值