前言
本文是以demo为例介绍,所以部分内容和解释会在demo里以注释的形式给出。
下载链接
数据库的构建
环境配置
在app模块的build.gradle添加以下内容:
compile 'android.arch.lifecycle:extensions:1.0.0-alpha5'
compile 'android.arch.lifecycle:runtime:1.0.0-alpha5'
compile 'android.arch.persistence.room:runtime:1.0.0-alpha5'
testCompile 'junit:junit:4.12'
annotationProcessor 'android.arch.lifecycle:compiler:1.0.0-alpha5'
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha5"
//数据库迁移的时候使用
compile "android.arch.persistence.room:testing:1.0.0-alpha5"
在项目的build.gradle中添加
allprojects {
repositories {
jcenter()
maven {
url "https://dl.google.com/dl/android/maven2/"
//官方给出的链接是maven.google.com,但是这个网站连不上
}
}
}
entity
当一个类用@Entity注解并且被@Database注解中的entities属性所引用,Room就会在数据库中为那个entity创建一张表。
默认Room会为entity中定义的每一个field都创建一个column。如果一个entity中有你不想持久化的field,那么你可以使用@Ignore来注释它们,在项目的db/entities目录下:
student.java
//也可以使用组合主键,使用@Entity注解的primaryKeys属性
//@Entity(primaryKeys = {"firstName", "lastName"})
//也可以使用索引或者组合索引
//@Entity(indices = {@Index("name"), @Index("name", "student_id")})
@Entity(tableName = Student.TABLE_NAME)
public class Student {
//静态成员并不会被转换为数据库中的条目
/** 表名 */
public static final String TABLE_NAME = "students";
public static final String COLUMN_NAME = "student_name";
public static final String COLUMN_ID = "student_id";
//每个表必须要有一个主键
@PrimaryKey
@ColumnInfo(index = true, name = COLUMN_ID)
private long uid;
//自己定义列名
@ColumnInfo(name = COLUMN_NAME)
private String name;
private int age;
private String subject;
@Ignore
Bitmap picture;
...
}
DAOs
dao文件中主要存放对数据库的操作,在项目的db/dao目录下
StudentDao