Room数据库框架

android开发也知道,用原生的数据库开发代码量多,特别麻烦。不过,目前google已经有自己的数据库框架Room了,现在写下自己使用Room框架的一些心得体会。

官方介绍:

The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite

Room持久型类库在SQLite的基础上提供了一个抽象层,方便大家流利的访问数据库,并且包含了SQLite的所有功能。很强大呀。。。

一、导入项目步骤:

1、添加仓库:我们需要在项目的build.gradle中添加google()仓库

allprojects {
repositories {
    jcenter()
    //添加google
    google()
 }
 }

2、在主app的module中添加依赖

def room_version = "1.1.1"
support.room = "android.arch.persistence.room:runtime:$room_version"
support.room_compiler = "android.arch.persistence.room:compiler:$room_version" // use kapt for Kotlin
support.room_rxjava2 = "android.arch.persistence.room:rxjava2:$room_version"//和rxJava2结合使用
support.room_guava = "android.arch.persistence.room:guava:$room_version"
support.room_test = "android.arch.persistence.room:testing:$room_version"//添加测试支持,我们可以对数据库进行androidTest

二、使用Room

Room 涉及到的概念有三点:

Entity:具体的bean实体,会与数据库表column进行映射

Dao:数据库访问对象,实现具体的增删改查。

RoomDatabase:提供直接访问底层数据库实现,我们应该从里面拿到具体的Dao,进行数据库操作。

根据以上三点可以去开发了,具体实例可以参考以下过程:

1、ProxyHttp (Entity实例,对应表中各个列名)

/**
 * 创建与数据库column映射的bean实体
 * entity声明定义,并且指定了映射数据表名
 */
@Entity(tableName = "proxyHttp")
public class ProxyHttp {
     //设置主键,并且定义自增
    @PrimaryKey(autoGenerate = true)
    public int id;
    public String http;
    public String name;
    public int point;
    public long upTime;

    //必须指定一个构造方法,room框架需要。并且只能指定一个,如果有其他构造方法,则其他的构造方法必须添加@Ignore注解
    public ProxyHttp() {
    }

    @Ignore
    public ProxyHttp(String http, String name, int point) {
        this.http = http;
        this.name = name;
        this.point = point;
    }

    @Ignore
    public ProxyHttp(String http, String name) {
        this.http = http;
        this.name = name;
    }
}
 

2、ProxyHttpDao (Dao数据库具体增删改查操作)

/**
 * 配置具体的Dao
 */
@Dao
public interface ProxyHttpDao {
    //onConflictStrategy.REPLACE表示如果已经有数据,那么就覆盖掉
    @Insert(onConflict = REPLACE)
    void insert(ProxyHttp http);

    //查找最新的更新时间为默认的选择地址
    @Query("SELECT * FROM proxyHttp ORDER BY upTime DESC")
    LiveData nowLive();

    //查找最新的更新时间为默认的选择地址 
    @Query("SELECT * FROM proxyHttp ORDER BY upTime DESC")
    ProxyHttp now();

    //查询所有服务器地址
    @Query("SELECT * FROM proxyHttp")
    ProxyHttp[] all();

    //更新某一个服务器地址
    @Update()
    int update(ProxyHttp http);

    //删除所有服务器地址列表数据
    @Delete
    int deleteAll(List list);
}
 

3、BaseDatabase 

/**
 * 表映射实体数据,以及数据库版本号
 */
@Database(entities = {ProxyHttp.class}, version = 1)
public abstract class BaseDatabase extends RoomDatabase {
    public abstract ProxyHttpDao ProxyHttpDao();
}

通过这三个步骤,已经可以使用room数据库来进行增删改查操作,不过使用之前,先调用这个方法:

BaseDatabase database = Room.databaseBuilder(getBaseContext(), BaseDatabase.class, "basis_dependencies.db")
                .build();

创建数据库成功。

再通过

database .ProxyHttpDao().now();//等其他方法

来进行一些数据库操作。。。

好了,以上就是Room数据库基本的增删改查,相信大家应该都掌握了。

三、数据库升级

当然,数据库不是一成不变的,我们有时候还需要进行版本的升级操作。

首先修改@Database ,修改升级信息:

/**
 * 表映射实体数据,以及数据库版本号
 */
@Database(entities = {ProxyHttp.class}, version = 2)
public abstract class BaseDatabase extends RoomDatabase {
    public abstract ProxyHttpDao ProxyHttpDao();

    public static final Migration MIGRATION_1_2 = new Migration(1, 2) {//参数1:这个数据库开始版本号, 参数2:当前更新后版本号
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("ALTER table proxyHttp ADD COLUMN proxyHttp TEXT NOT NULL DEFAULT 'https'");
        }
    };
}

其次就是创建数据库,添加该Migration对象:

    database = Room.databaseBuilder(getBaseContext(), BaseDatabase.class, "basis_dependencies.db")
                //添加数据库变动迁移
                .addMigrations(BaseDatabase.MIGRATION_1_2 )
                .build();

ok啦,数据库版本很简单就升级了。。。

是不是觉得很强大,很好用。。。

 

你可能感兴趣的:(Room数据库框架)