Architecture -- Room

简介: 1). 简介Room persistence库为SQLite提供了一个抽象层,以便在利用SQLite的全部功能的同时实现更强大的数据库访问。该库可帮助您在运行应用程序的设备上创建应用程序数据的缓存。
1). 简介

Room persistence库为SQLite提供了一个抽象层,以便在利用SQLite的全部功能的同时实现更强大的数据库访问。
该库可帮助您在运行应用程序的设备上创建应用程序数据的缓存。 此缓存作为应用程序的唯一事实来源,允许用户在应用程序中查看关键信息的一致副本,无论用户是否具有Internet连接。

2). 依赖

buildscript {
  ext.room_version = "1.1.0"
}

dependencies {
  // Room 使用
  implementation "android.arch.persistence.room:runtime:$room_version"
  annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  // optional - RxJava support for Room
  implementation "android.arch.persistence.room:rxjava2:$room_version"
  // optional - Guava support for Room, including Optional and ListenableFuture
  implementation "android.arch.persistence.room:guava:$room_version"
  // Test helpers
  testImplementation "android.arch.persistence.room:testing:$room_version"
  // Kotlin
  kapt "android.arch.persistence.room:compiler:$room_version"
}
AI 代码解读
3). 数据实体类
 * 实体类
 * Created by mazaiting on 2018/7/25.
 */
@Entity
data class User(
       @PrimaryKey
        val uid: Int,
       @ColumnInfo(name = "first_name")
       var firstName: String,
       @ColumnInfo(name = "last_name")
       var lastName: String
)
AI 代码解读
4). 用户DAO类
/**
 * 用户DAO类
 * Created by mazaiting on 2018/7/25.
 */
@Dao
interface UserDao {
  @Query("SELECT * FROM user")
  fun getAll(): List<User>
  @Query("SELECT * FROM user  WHERE uid IN (:userIds)")
  fun loadAllByIds(userIds: IntArray): List<User>
  @Query("SELECT * FROM user WHERE first_name LIKE :first AND last_name LIKE :last LIMIT 1")
  fun findByName(first: String, last: String): User
  @Insert
  fun insertAll(users: List<User>)
  // 可变参数
//  fun insertAll(vararg users: User)
  @Delete
  fun delete(user: User)
  @Update
  fun update(user: User)
}
AI 代码解读
5). 数据库类
/**
 * 数据库类
 * Created by mazaiting on 2018/7/25.
 */
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
  // 获取DAO
  abstract fun userDao(): UserDao
}
AI 代码解读
6). 创建数据库
    btn_create_db.setOnClickListener {
      val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "TEST").build()
      userDao = db.userDao()
    }
AI 代码解读
7). 新增数据

对数据的操作必须在子线程中

    btn_insert.setOnClickListener {
      Thread(Runnable {
        val users = (0..10).map { User(it, "first$it", "last$it") }
        userDao.insertAll(users)
      }).start()
    }
AI 代码解读
8). 查询数据
    btn_find_all.setOnClickListener {
      Thread(Runnable {
        userDao.getAll().forEach { L.e(it.toString()) }
      }).start()
    }
    btn_find_id.setOnClickListener {
      Thread(Runnable {
        userDao.loadAllByIds(intArrayOf(0, 1, 2, 3, 4)).forEach { L.e(it.toString()) }
      }).start()
    }
    btn_find_name.setOnClickListener {
      Thread(Runnable {
        L.e(userDao.findByName("first1", "last1").toString())
      }).start()
    }
AI 代码解读
9). 更新数据
    btn_update.setOnClickListener {
      Thread(Runnable {
        val user = userDao.findByName("first1", "last1")
        user.firstName = "ma"
        user.lastName = "zaiting"
        userDao.update(user)
        userDao.loadAllByIds(intArrayOf(1)).forEach { L.e(it.toString()) }
      }).start()
    }
AI 代码解读
10). 删除数据
    btn_delete.setOnClickListener {
      Thread(Runnable {
        userDao.delete(userDao.loadAllByIds(intArrayOf(0))[0])
      }).start()
    }
AI 代码解读
11). 原文地址
12). 代码下载
目录
打赏
0
0
0
0
69
分享
相关文章
PAT (Advanced Level) Practice - 1148 Werewolf - Simple Version(20 分)
PAT (Advanced Level) Practice - 1148 Werewolf - Simple Version(20 分)
136 0
Stack based vs Register based Virtual Machine Architecture
进程虚拟机简介 一个虚拟机是对原生操作系统的一个高层次的抽象,目的是为了模拟物理机器,本文所谈论的是基于进程的虚拟机,而不是基于系统的虚拟机,基于系统的虚拟机可以用来在同一个平台下去运行多个不同的硬件架构的操作系统,常见的有kvm,xen,vmware等,而基于进程的虚拟机常见的有JVM,PVM(python虚拟机)等,java和python的解释器将java和python的代码编译成JVM和P
3751 0
Architecture -- Data Binding Library
1). 简介 Data Binding Library是一个支持库,允许在布局文件中绑定数据源。最小支持API为14,gradle插件最小为1.5.0。示例 2).
908 0
Architecture -- Lifecycle
1). 简介 生命周期感知组件执行操作以响应另一个组件(例如活动和片段)的生命周期状态的更改。 这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。
984 0
Architecture -- ViewModel
1). 简介 ViewModel类旨在以生命周期意识的方式存储和管理UI相关数据。 ViewModel类允许数据在配置更改(例如屏幕旋转)后继续存在。 Android框架管理UI控制器的生命周期,例如活动和片段。
994 0
Architecture -- LiveData
1). 简介 LiveData是一个可观察的数据持有者类。 与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如活动,片段或服务。
1063 0
Architecture -- WorkManager
1. WorkManager 1). 简介 其实就是"管理一些要在后台工作的任务, -- 即使你的应用没启动也能保证任务能被执行",WorkManager在底层, 会根据你的设备情况, 选用JobScheduler, Firebase的JobDispatcher, 或是AlarmManager。
918 0
Big Data Application Case Study – Technical Architecture of a Big Data Platform
How should we design the architecture of a big data platform? Are there any good use cases for this architecture?
2266 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等