Android 数据库DbFlow的使用

Android 数据库DbFlow的使用

为什么要使用DbFlow

DBFlow的设计吸取了其他很多ORM框架中好的特征,并将之做得更好。它很灵活,让你能更专注于App中真正需要关注的地方。不要让一个ORM库限制了你的思维,而是让代码在你的App中工作得更好。

使用步骤:

1.引入DBflow库,github地址 https://github.com/Raizlabs/DBFlow
  • 添加仓库托管地址

allProjects {
repositories {
// required to find the project’s artifacts
maven { url “https://www.jitpack.io” }
}
}

  • 在moudel的build.gradle中添加
def dbflow_version = "4.2.4"
   
 annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"

 compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
 
  compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
2.代码中使用
  • 在Application中初始化Dbflow
public class App  extends Application{
   @Override
   public void onCreate() {
       super.onCreate();
       FlowManager.init(this);
   }
}
  • 创建一个数据库
 @Database(name = AppDataBase.NAME, version = AppDataBase.VERSION)
public class AppDataBase {

    public static final String name = "dbflowDataBase";

    public static final int VERSION = 1;
}
  • 创建表
@Table(database = AppDatabase.class)
public class User extends BaseModel {

    @PrimaryKey(autoincrement = true)
    public long id;

    @Column
    public String name;

    @Column
    public int age;

    public  void insertData(String name,int age){
        this.name=name;
        this.age = age;
    }
}
  • 保存一条数据
User mUser = new User();
String name = mEtName.getText().toString();
String age = mEtAge.getText().toString();
mUser.insertData(name, Integer.parseInt(age));
// dbflow 保存数据
boolean save = mUser.save();
Toast.makeText(this, save ? "保存成功" : "添加失败", Toast.LENGTH_SHORT).show();
  • 查询数据
List<User> users = SQLite.select().from(User.class).queryList();// 查询所有记录

User user = SQLite.select().from(User.class).querySingle();//   查询第一条记录
  • 删除数据
在where中可以添加删除条件,比如删除id等于1的,或者名字为张三的等等 都可以:
SQLite.delete()
        .from(User.class)
        .where(User_Table.id.eq(1))
        .query();

如果删除整个表,可以这样:
Delete.table(User.class);
  • 修改某条数据
例如根据id修改某条数据为名字叫小王,年龄为20:
SQLite.update(User.class)
        .set(User_Table.name.eq("小王"),User_Table.age.eq(20))
        .where(User_Table.id.eq(user.id))
        .query();

ok,Dbflow的增删改查方法就这么简单,也很好记忆,因为DBFlow的查询语法尽可能地和SQL语句相似,能更快上手,这也是我为什么要使用它的一个原因。除此之外,dbflow还有多表关联的知识,比如一对一,一对多,多对多等等,这些可以查看文档https://agrosner.gitbooks.io/dbflow/content/
另外我写了一个demo,效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMS6rSIA-1601372776571)(https://raw.githubusercontent.com/ge1944633835/source-material/master/dbflow/dbflowGif.gif)]

  • 在组件化中去使用

比如项目的结构是:主App下有Alibrary以及Blibrary两个模块,Alibrary跟Blibrary都依赖了CommonLibrary了。然后呢,如果说你在CommonLibrary中进行建表,初始化数据库,然后在App或者Alibrary、Blibrary中去使用的话,会直接报错。对此呢,github上也有人提这个问题,作者也给出了解决方案 链接地址 文档也描述了该怎么去操作,但是还是容易踩坑。这里需要注意:```
kapt {
arguments {
arg(“targetModuleName”, “SomeUniqueModuleName”)
}
}
其中SomeUniqueModuleName名字你可以根据对应的Module来起,比如在Alibrary中可以为arg(“targetModuleName”, “AModule”),Blibrary中可以为arg(“targetModuleName”, “Blibrary”),然后clean,重新rebuild一下 就能生成对应的AModuleGeneratedDatabaseHolder.class以及BModuleGeneratedDatabaseHolder.class,
最后呢在你的主APP的Application中去初始化并且给他们添加进来:
FlowManager.init(FlowConfig.builder(this)
.addDatabaseHolder(AModuleGeneratedDatabaseHolder.class)
.addDatabaseHolder(BModuleGeneratedDatabaseHolder.class)
.build());

提供demo的地址:

github下载 https://github.com/ge1944633835/DBFlowSample
csdn下载 http://download.csdn.net/download/imsunlight/10199927
录制的一个小视频:http://v.youku.com/v_show/id_XMzMwODM2MjA1Ng==.html?spm=a2h3j.8428770.3416059.1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值