说明:

大部分译自Android Developers的Room官网指导文档第一篇,小部分自己查阅资料和理解后加上。

原文地址:https://developer.android.com/training/data-storage/room/

定义:

Room 在SQLite上提供了一个抽象层,从而在操作SQLite的时候能够流畅的访问数据库。

为什么要有Room:

如果能够实现结构化数据的本地存储,那么对于App来说是一件意义非凡并且好处巨大的事情。

最常见的用图就是缓存相关数据。通过这个方式,当设备无法连接到网络时,用户仍然能够通过离线方式来浏览内容。当设备重新连接网络后,所有内容会通过服务器同步进行变更。由于Room已经为开发者考虑了以上的问题,因此我们强烈推荐使用Room来代替SQLite。然鹅,如果你一意孤行非要用的话,好吧我不拦你,自备梯子,直走右拐谢谢:Save Data Using SQLite.

构成 :

Room主要由三个组件构成:

@Database:包含了数据库holder和一些服务,作为app持久化状态,关系型数据的底层连接的主要连接点。

使用@Database注解的类需要满足以下条件:

  • 集成RoomDatabase的抽象类
  • 包含实体列表,并且通过注解和数据库有所关联
  • 包含一个无参抽象方法并且返回的类需要用@Dao注解

运行时,你可以通过 Room.databaseBuilder() 或者Room.inMemoryDatabaseBuilder()两种方式来创建Database实例。

@Entity:用来注解实体类,@Database通过entities属性引用被@Entitiy注解的类,并利用该类的所有字段作为表的列明来创建表

@Dao:提供访问数据库的方法。

这三个组件之间的关系如下图:

使用:

接下来举个小例子,包含了一个简单的数据库,里面有一个实体和一个DAO:

1.添加依赖

Room依赖

dependencies { def room_version = "1.1.1" 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"
}

注意:这个是Room官方文档的依赖项,其中optional的可以不加,因为暂时不需要Rxjava。

2.开始正式体验Room

首先创建实体类 - User.java

@Entity
public class User { @PrimaryKey private int uid; @ColumnInfo(name = "first_name") private String firstName; @ColumnInfo(name = "last_name") private String lastName; // Getters and setters are ignored for brevity, // but they're required for Room to work.
}

然后是Dao - UserDao.java

@Dao
public interface UserDao { @Query("SELECT * FROM user") List<User> getAll(); @Query("SELECT * FROM user WHERE uid IN (:userIds)") List<User> loadAllByIds(int[] userIds); @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") User findByName(String first, String last); @Insert void insertAll(User... users); @Delete void delete(User user);
}

最后是Database类 - AppDatabase.java

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao();
}

创建完上面三个类,就可以通过下面这段代码创建一个数据库实例

AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build(); 

个人总结:

这篇文章主要是介绍了room的组成部分以及简单的使用方式。一句话总结就是,Entity用于建表,Dao用于CRUD,Database用于创建数据库。

接下来我会把Room这一系列的文章都翻译完,最后再通过一个小项目,达到理论实践都掌握的程度,真正理解Room这个数据库框架。

第二篇:Android Room Entity使用

第三篇:Android Room Dao使用

第四篇:Android Room迁移数据库

第五篇:Android Room测试数据库

第六篇:Android Room引用复杂数据

第七篇:Android Room实战

最后,这是我第一次翻译外文技术文章,肯定会有词不达意或者错误的地方,希望大家批评指正,共同进步。

参考:

Android Room with a View

Android Persistence codelab

Android Architecture Components samples

Android Room概述相关推荐

  1. Android零基础入门第33节:Android事件处理概述

    原文:Android零基础入门第33节:Android事件处理概述 通过对Android基本组件的学习,也有接触少部分Android的事件处理,比如按钮的点击事件.选框的状态切换事件. 一.Andro ...

  2. Android Auto 概述

    Android Auto 概述 作为物联网的一个重要部分,车载系统是谷歌生态系统的一个重要终端,谷歌推出AndroidAuto.AndroidAuto是要把Android做进汽车行业.用户将手机和汽车 ...

  3. Android 传感器概述(一)

    Android 传感器概述(一) Android 传感器概述(一) 传感器简介 传感器框架 识别传感器和传感器特性 监控传感器事件 处理不同的传感器配置 在运行时检测传感器 使用 Google Pla ...

  4. Android Activity概述

    Activity概述 声明:原文来至Android官方开发参考ActivityClassOverview.水平有限,敬请谅解 http://developer.android.com/referenc ...

  5. Android NDK 概述(Android NDK Overview)

    Android NDK 功能概述 Android NDK就是一套用于把C/C++源码编译得到的二进制机器码嵌入应用安装包的工具. Android NDK是对Android SDK的一个补充,可以帮助你 ...

  6. Android Binder概述

    背景知识 为了更好的理解binder,我们要先澄清一下概念,因为Android 基于Linux内核,我们有必要了解相关知识. 进程隔离 进程隔离是为了保护操作系统进程之间互不干扰而设计的,这个技术是为 ...

  7. android 多线程概述

    android多线程,一直是一个麻烦的事情,要掌握它的本质,我们需要搞清楚一个问题,linux多线程的本质. 我们这篇文章,来讨论以下的议程: 了解linux的历程,了解android的异步任务机制, ...

  8. Android监视器概述

    还望支持个人博客站:http://www.enjoytoday.cn Android监视器可帮助您分析应用程序的性能,以便您优化,调试和改进它们. 它可以让您从硬件设备或Android模拟器监控应用程 ...

  9. sunny底层android,Android网络通信概述

    网络通信在App的使用中占据重要地位,要实现网络通信,从宏观上分为两种方式,即:调用原生类和使用第三方框架. 调用原生类 Android中通过原生类进行网络通信时,根据业务场景的不同,主要分为两种方式 ...

  10. android8.0学习(1)---Android Treble 概述

    1 Android Treble Android 8.0 版本的一项新元素是 Project Treble.这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松. ...

最新文章

  1. Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
  2. Content-Type简要说明
  3. Even Number Theory
  4. atm机java+gui+oracle编程代码_java应用在哪里?
  5. 磁盘io php,PHP CURL如何处理上传内存中文件,避免磁盘IO开销
  6. 『诡异的』VL10B创建外向交货单出错解决全过程
  7. JQuery中如何动态修改input的type属性
  8. WordPress更新提示无法创建目录的解决方案
  9. inceptor手册
  10. LOL登录后黑屏,主界面一直加载解决办法
  11. wav转换mp3简单图文教程
  12. mov格式的视频转换mp4?视频格式转换这样做
  13. 计算机辅助测试图示,计算机基础知识:计算机辅助测试
  14. html中iframe标签的用法详解
  15. 第一讲:云计算的概念
  16. 教你使用shell脚本打印五角星
  17. GIS原理篇 地图投影
  18. java solid设计原则_六大设计原则之里氏替换原则(LSP)
  19. 一个天气App案例(一)
  20. 教师学python有什么用_李老师带你学Python-第一课 为什么Python这么火

热门文章

  1. 【Tool】一款轻量级的强大截图工具--Sinpaste | 从此告别QQ截图
  2. Siege——压力测试
  3. Derby--jdk自带数据库的使用
  4. Consumer - 消费者
  5. npm intasll 安装报错 Error: EPERM: operation not permitted, mkdir ‘C:\Program Files\nodejs\node_cache\_
  6. OTP一次性动态密码工具Java实现
  7. 数据结构之链表详解(2)——双向链表
  8. DRM(Direct Rendering Manager)
  9. 树莓派有线网络设置_Adafruit的树莓派教程:网络设置
  10. iOS 使用 Charts 库实现分时、K线及指标