经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
快速了解Android Room使用细则
来源:jb51  时间:2023/3/3 8:50:22  对本文有异议

1、前言

最近在开发中,Room用的比较多,时不时要查资料,干脆写一篇Room的使用和Room的封装。如果写的不好,或者有错误之处,恳请在评论、私信、邮箱指出,万分感谢??

2、添加依赖

  1. dependencies {
  2. implementation "androidx.room:room-ktx:2.4.0"
  3. }

2、Entity

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

  1. @Entity(tableName = "user")
  2. data class User(
  3. @PrimaryKey val id: Int,
  4. @ColumnInfo(name = "name") val name: String,
  5. @ColumnInfo(name = "email") val email: String
  6. )

3、DAO

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

  1. @Dao
  2. interface UserDao {
  3. @Query("SELECT * FROM user")
  4. fun getAll(): List<User>
  5.  
  6. @Query("SELECT * FROM user WHERE id = :id")
  7. fun getById(id: Int): User?
  8.  
  9. @Insert
  10. fun insert(user: User)
  11.  
  12. @Update
  13. fun update(user: User)
  14.  
  15. @Delete
  16. fun delete(user: User)
  17. }

4、Database

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

  1. @Database(entities = [User::class], version = 1)
  2. abstract class AppDatabase : RoomDatabase() {
  3. abstract fun userDao(): UserDao
  4.  
  5. companion object {
  6. private var INSTANCE: AppDatabase? = null
  7.  
  8. fun getInstance(context: Context): AppDatabase {
  9. return INSTANCE ?: synchronized(this) {
  10. val instance = Room.databaseBuilder(
  11. context.applicationContext,
  12. AppDatabase::class.java,
  13. "app_database"
  14. ).build()
  15. INSTANCE = instance
  16. instance
  17. }
  18. }
  19. }
  20. }

5、获取DAO实例

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

  1. val db = AppDatabase.getInstance(context)
  2. val userDao = db.userDao()

6、调用DAO方法

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

  1. val users = userDao.getAll()
  2. val user = userDao.getById(1)
  3. val newUser = User(2, "鸡你太美", "jinitaimei@qq.com")
  4. userDao.insert(newUser)
  5. newUser.email = "jinitaimei@qq.com"
  6. userDao.update(newUser)
  7. 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. @Transaction
  2. fun updateUserData(user: User, address: Address) {
  3. userDao.update(user)
  4. addressDao.update(address)
  5. }

9、数据库迁移

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

  1. @Database(entities = [User::class], version = 2, exportSchema = false,
  2. migrations = [Migration(1, 2) { database ->
  3. database.execSQL("ALTER TABLE user ADD COLUMN phone TEXT NOT NULL DEFAULT ''")
  4. }]
  5. )
  6. abstract class AppDatabase : RoomDatabase() {
  7. // ...
  8. }

10、视图(View)

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

  1. @DatabaseView(
  2. "SELECT user.id, user.name, address.city, address.country FROM user " +
  3. "INNER JOIN address ON user.address_id = address.id"
  4. )
  5. data class UserAddress(
  6. val id: Int,
  7. val name: String,
  8. val city: String,
  9. val country: String
  10. )
  11.  
  12. @Dao
  13. interface UserAddressDao {
  14. @Query("SELECT * FROM user_address")
  15. fun getAll(): List<UserAddress>
  16. }

11、Flow!

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

  1. @Dao
  2. interface UserDao {
  3. @Query("SELECT * FROM user WHERE id = :id")
  4. fun getById(id: Int): Flow<User>
  5.  
  6. @Query("SELECT * FROM user")
  7. fun getAll(): Flow<List<User>>
  8. }

结尾

实际上,Room的应用远不止如此,如果有人感兴趣的话,我就出下一期吧!比如封装一个Room的数据库层

感谢

  • 校稿:ChatGpt/Bing
  • 文笔优化:ChatGpt/Bing/秘塔写作猫

以上就是快速了解Android Room使用细则的详细内容,更多关于Android Room使用的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号