Android MVVM设计模式(Room)

正文

今天我们来集成使用jetpack的room

Room: The Room persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.

这个是官网的描述,简而言之就是使用Room可以更好、更方便、更流畅地访问SQLite数据库

配置Gradle

dependencies {
    ...
    // Room
    implementation "androidx.room:room-runtime:2.1.0-alpha06"
    annotationProcessor "androidx.room:room-compiler:2.1.0-alpha06"
}

我们在Gradle中进行如上配置,之后点击同步按钮,等待同步成功后我们就可以使用Room了

创建实体(Entity)

package com.yk.jchat.model.model;

import androidx.room.Embedded;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class User {

    @PrimaryKey(autoGenerate = true)
    private Integer id;

    private String nickname;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
}

@Entity注解用来表示这个类是Room的一个实体
@PrimaryKey注解用来表示这个属性为主键(autoGenerate = true表示自增长,注意,每个实体类至少有一个主键)

创建DAO

package com.yk.jchat.model.dao;

import com.yk.jchat.model.model.User;

import java.util.List;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;

@Dao
public interface UserDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(User... users);

    @Delete
    void delete(User... users);

    @Update(onConflict = OnConflictStrategy.REPLACE)
    void update(User... users);

    @Query("SELECT * FROM User WHERE id == :id")
    User queryForId(int id);

    @Query("SELECT * FROM User WHERE nickname == :nickname")
    List<User> queryForNickname(String nickname);

    @Query("SELECT * FROM User")
    List<User> queryAll();

}

DAO是用来进行数据库操作的,我们只需要相应的方法前加上对应的注解即可,比如

  • @Insert表示插入
  • @Delete表示删除
  • @Update表示更新
  • @Query表示查询

你可以注意到了有的注解有这样一行语句onConflict = OnConflictStrategy.REPLACE,这个是处理事务冲突的策略,OnConflictStrategy.REPLACE表示用替代,更多策略可以查询官网,还有我们的查询方法可以根据自己的需求编写查询语句。

创建数据库

package com.yk.jchat.model.db;

import com.yk.jchat.model.dao.UserDao;
import com.yk.jchat.model.model.User;

import androidx.room.Database;
import androidx.room.RoomDatabase;

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

    public abstract UserDao userDao();

}

数据库AppDatabase是个抽象类,它里面新建一个抽象方法userDao(),到这一步我们就可以使用它了,我们先要获取AppDatabase的实例,通常是在Application或一个单例类中获取,因为每获取一次AppDatabase的实例是耗内存的,获取的方法是

AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "my_database").build();

获取之后我们就可以进行增删改查操作了,方法如下

db.userDao().insert(); //增
db.userDao().delete(); //删
db.userDao().update(); //改
db.userDao().queryAll(); //查

好了,Room就介绍到这里,希望大家喜欢。

    原文作者:JYangkai
    原文地址: https://www.jianshu.com/p/b6973cc35105
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞