Android Room

本文介绍了Android的Room数据库框架,包括数据实体对象、DAO层的交互方式、Entity注解、字段注解、方法注解以及Database注解的使用。通过示例代码详细展示了如何配置和操作Room数据库。
摘要由CSDN通过智能技术生成

官方文档: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();
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值