android框架连接mysql_Android:ROOM数据库框架

ROOM

ROOM对Sqlite进行了封装,直接使用ROOM来进行数据库访问。

ROOM数据库查询可以直接返回LiveData对象,每次CRUD都会自动更新该LiveData,LiveData始终是数据库最新值

利用该特性可以直接将数据库的变化,通过LiveData作为观察者传递到ViewModel,保证拿到的数据都是数据库中时刻最新的值

使用流程:

Entry类-->Dao-->EntryRoomDatabase(单例模式)-->Repository(从EntryRoomDatabase获得Dao)-->在Repository中实现异步-->AndroidViewModel通过Repository访问数据库CRUD

数据库操作不应该在MainThread中,所以我们使用AsyncTask来进行数据库操作。

UI层(Activity和Fragment)所有的数据应该都直接从ViewModel来获取,在ViewModel中我们使用AsyncTask来进行数据库操作。

ROOM进行数据库操作依赖于Dao接口,在该接口中实现了很多数据库操作。

主要角色Entry 实体类

Dao 定义接口数据库操作

继承RoomDatabase 通过ROOM实例化database返回Dao供调用

异步类调用Dao中数据库操作如AsyncTask

Repository对操作进行封装

AndroidViewModel 聚合 Repository来执行数据库操作

使用方法

Entry类-->Dao-->EntryRoomDatabase(单例模式)-->Repository(从EntryRoomDatabase获得Dao)-->在Repository中实现异步-->AndroidViewModel通过Repository访问数据库CRUD

代码实现

Entry

@Entity

public class Word {

@PrimaryKey(autoGenerate = true)

private int id;

@ColumnInfo(name = "english")

private String english;

@ColumnInfo(name = "chinese")

private String mean;

public Word(String english, String mean) {

this.english = english;

this.mean = mean;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getEnglish() {

return english;

}

public void setEnglish(String english) {

this.english = english;

}

public String getMean() {

return mean;

}

public void setMean(String mean) {

this.mean = mean;

}

}

Dao

@Dao

public interface WordDao {

@Insert

void insertWord(Word... words);

@Update

void update(Word... words);

@Delete

void delete(Word... words);

@Query("DELETE FROM WORD")

void deleteAll();

@Query("SELECT * FROM WORD ORDER BY ID DESC")

LiveData> getAll();

}

WordRoomDatabase

@Database(entities = {Word.class},version = 1,exportSchema = false)

public abstract class WordRoomDatabase extends RoomDatabase {

public abstract WordDao getWordDao();

private static WordRoomDatabase INSTANCE;

public static WordRoomDatabase getInstance(final Context context) {

if (INSTANCE == null) {

synchronized (WordRoomDatabase.class) {

if (INSTANCE == null) {

INSTANCE = Room.databaseBuilder(context.getApplicationContext(),

WordRoomDatabase.class, "word_database")

.build();

}

}

}

return INSTANCE;

}

}

Repository

public class Repository {

private LiveData> wordsLive;

public LiveData> getWordsLive() {

return wordsLive;

}

//用来调用数据库操作

private WordDao wordDao;

public Repository(Context context) {

WordRoomDatabase wordRoomDatabase = WordRoomDatabase.getInstance(context.getApplicationContext());

wordDao = wordRoomDatabase.getWordDao();

wordsLive = wordDao.getAll();

}

public void insert(Word... words){

new InsertTask(wordDao).execute(words);

}

public void delete(Word... words){

new DeleteTask(wordDao).execute(words);

}

public void update(Word... words){

new UpdateTask(wordDao).execute(words);

}

public void deleteAll(){

new DeleteAllTask(wordDao).execute();

}

}

VeiwModel

public class MainViewModel extends AndroidViewModel {

// ViewModel 没有很好的方法来获得一个Context 需要继承AndroidViewModel

Repository repository;

public MainViewModel(Application application) {

super(application);

this.repository = new Repository(application);

}

public LiveData> getAll(){

return repository.getWordsLive();

}

public void insert(Word... words){

repository.insert(words);

}

public void update(Word... words){

repository.update(words);

}

public void delete(Word... words){

repository.delete(words);

}

public void deleteAll(){

repository.deleteAll();

}

}

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值