官方文档:https://developer.android.com/topic/libraries/architecture/room.html
一、Room数据库框架结构
1、数据实体对象:作为业务逻辑的数据结构组成部分,并且提供标准的get/set方法,如果有必要也需重写equals和hashCode方法。与DAO层的交互是通过注解的方式来实现的。
(1)Entity注解:是在类层次上的注解,主要的作用是指定tableName,默认情况下是表名就是类名.很好奇两个表名相同的数据实体对象在执行数据读写操作时会是什么情况?编译的时候就报类似如下的错误:
Error:(15, 8) 错误: Table name "contact" is used by multiple entities: com.example.dson.app.model.entry.Contact, com.example.dson.app.model.entry.BadContact
(2)实体属性注解:作用就是为数据库表中字段赋予特殊性,最常见的就是PrimaryKey和Ignore,PrimaryKey注解标注的属性将作为主键,而Ignore注解标注的字段不会被保存。
(3)字段分为两种:一是基本类型,是不需要进行转换;而对象类型:需要转换,否则会报如下错误:
Error:(29, 24) 错误: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
(4)具体如下联系人的示例代码:
首先引入顶层build.gradle配置和引入模块build.gradle配置
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}
compile "android.arch.persistence.room:runtime:1.0.0-alpha3"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha3"
testCompile "android.arch.persistence.room:testing:1.0.0-alpha3"
@Entity
public class Contact {
@PrimaryKey(autoGenerate = true)
private long id;
private String name;
@Ignore
private boolean isChecked;
private String phone;
private char initial;
private long time;
@Ignore
private BadContact object;
private long groupId;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public char getInitial() {
return initial;
}
public void setInitial(char initial) {
this.initial = initial;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public BadContact getObject() {
return object;
}
public void setObject(BadContact object) {
this.object = object;
}
@Override
public String toString() {
return "name:" + name + "initial:" + initial + "phone:" + phone + "isChecked:" +
isChecked;
}
public long getGroupId() {
return groupId;
}
public void setGroupId(long groupId) {
this.groupId = groupId;
}
public static LetterComparator getComparator() {
return new LetterComparator();
}
private static class LetterComparator implements Comparator<Contact> {
@Override
public int compare(Contact lhs, Contact rhs) {
char a = lhs.getInitial();
char b = rhs.getInitial();