当前位置:首页 » 《关注互联网》 » 正文

Android Jetpack组件-Room增删改_让开,我要吃人了的博客

21 人参与  2021年08月23日 11:43  分类 : 《关注互联网》  评论

点击全文阅读


背景

在项目中不可避免的使用数据库, 而三方框架又是五花八门, 在这中我就选择了google Jetpack组件中的Room

创建Dao

在room中Dao是一个接口, 通过@Dao注解进行修饰

@Dao
public interface TestDao {
}

添加数据

  • 通过@Insert注解指定方法为添加数据方法, 默认处理模式为忽略当前数据

由于在添加时有可能是一条数据,也有可能是一组数据,所以在这用的是可变数组

@Insert
void add(TestEntity... entities);
  • 更改添加数据模式

刚才说了通过@Insert注解指定方法默认忽略当前数据, 如果有需求需要替换怎么做呢

通过指定@Insert注解的onConflict来解决 OnConflictStrategy.REPLACE:如果有老的数据存在则会进行替换,如果没有就插入
OnConflictStrategy.ROLLBACK:如果有老的数据存在则会回滚事物,如果没有就插入
OnConflictStrategy.ABORT:如果有老的数据存在则会终止事物,如果没有就插入
OnConflictStrategy.FAIL:如果有老的数据存在则会提示插入数据失败,如果没有就插入
OnConflictStrategy.IGNORE:如果有老的数据存在则忽略当前数据,如果没有就插入
用法如下

@Insert(onConflict = OnConflictStrategy.REPLACE)
void add(TestEntity... entities);

删除数据

通过@Delete注解指定方法为删除数据方法

@Delete
void delete(TestEntity... entities);

更新数据

通过@Update注解指定方法为更新数据方法

@Update
void update(TestEntity... entities);

调用逻辑

  • AppDatabase中定义Dao对应的方法
public abstract TestDao testDao();
  • 定义Dao接口对应的实现类为单例, 并获取AppDatabase对象
public class TestRepo {
    private static TestRepo sInstance;

    private final AppDatabase mDatabase;

    private TestRepo(final AppDatabase database) {
        mDatabase = database;
    }

    public static TestRepo getInstance() {
        if (sInstance == null) {
            synchronized (TestRepo.class) {
                if (sInstance == null) {
                    AppDatabase database = AppDatabase.getInstance();
                    sInstance = new TestRepo(database);
                }
            }
        }
        return sInstance;
    }
}
  • 封装方法,并调用Dao中对应的增删改的方法

由于在Dao中add定义的为可变数组, 所以在Dao实现类中会创建两个方法, 一个为单条数据, 一个为多条数据, 以便调用

以下仅为 添加方法的样例, 删除和修改类似

public void addResults(TestEntity entity) {
    mDatabase.testDao().add(entity);
}

public void addResults(List<TestEntity> entities) {
    int size = entities.size();
    TestEntity[] amHeartRateEntities = new TestEntity[size];
    for (int i = 0; i < size; i++) {
        amHeartRateEntities[i] = entities.get(i);
    }
    mDatabase.testDao().add(amHeartRateEntities);
}

点击全文阅读


本文链接:http://zhangshiyu.com/post/25976.html

数据  方法  注解  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1