DBFlow使用

DBFlow优点介绍

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

扩展性: ORM所需的数据类只需要实现Model接口即可,而不需要必须继承一个类,同时为了方便,我们还是推荐继承BaseModel,这是Model接口的一个标准实现。这样你既可以通过继承一个来自其他包的非Model类来生成你的数据库表,也可以通过继承一个Model类并通过添加@Column注解的属性向表中自由添加列。这一切都是为了方便你的使用。

速度:DBFlow基于AnnotationProcessing(注解处理器),通过编译期代码生成,运行时对性能是零损耗的。通过模板来为你维护生成的代码。通过缓存和尽可能地重用对象,我们得到了比原生SQLite更快的速度。同时我们还支持懒加载(lazy-loading),比如对于@ForeignKey和@OneToMany,这使得我们有着更高效得查询效率

SQLite查询流(SQLite Query Flow):
DBFlow的查询语法尽可能地和SQL语句相似,使您能更快上手。select(name,
screenSize).from(Android.class).where(name.is(“Nexus
5x”)).and(version.is(6.0)).querySingle()

开源: 整个DBFlow库都是开源的,而且也非常欢迎大家来为这个库贡献自己的力量。 Robust:
我们支持Trigger,ModelView,Index,Migration,所有的数据库操作都在同一个线程(线程安全),还有其他特性。

多数据库、多表单: 我们无缝支持多数据库文件,database modules using DBFlow in other
dependencies, simultaneously. 基于SQLite:
SQLite是世界上使用最广泛的数据库引擎,基于SQLite的DBFlow使你不需要被限制在某些平台上。

特性:
1、无缝支持多个数据库;
2、使用annotation processing提高速度;
3、ModelContainer类库可以直接解析像JSON这样的数据;
4、增加灵活性的丰富接口。

1.配置

在项目目录的build.gradle中加入:

allprojects {
    repositories {
        ...
        // required to find the project's artifacts
        maven { url "https://www.jitpack.io" }
    }
}

dependencies {
      ...
      classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

在工程目录的build.gradle中加入:

apply plugin: 'com.neenbedankt.android-apt'

def dbflow_version = "4.0.0-beta5"
dependencies {
    annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"

    // use kapt for kotlin apt if you're a Kotlin user
    apt "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中初始化

public class myApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        FlowManager.init(new FlowConfig.Builder(this).build());
    }

1.创建数据库

@Database(name = DBFlowDatabase.NAME, version = DBFlowDatabase.VERSION)
public class DBFlowDatabase {
    //数据库名称
    public static final String NAME = "DBFlowDatabase";
    //数据库版本号
    public static final int VERSION = 1;
}

2.创建Model

import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.ModelContainer;
import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
import com.raizlabs.android.dbflow.structure.BaseModel;

@ModelContainer //表示可以直接解析JSON
@Table(database = DBFlowDatabase.class)
public class UserModel extends BaseModel {
    //自增ID
    @Column
    @PrimaryKey(autoincrement = true)
    public Long id;
    @Column
    public String name;
    @Column
    public int sex;
}

必须继承BaseModel,BaseModel包含了基本的数据库操作(save、delete、update、insert、exists)

一个正确的数据表类需要以下几项: 对类添加@Table注解 声明所连接的数据库类,这里是DBFlowDatabase。 定义至少一个主键。
这个类和这个类中数据库相关列的修饰符必须是包内私有或者public。 这样生成的_Adapter类能够访问到它。 NOTE:
列(Column)属性可以是private,但这样就必须指定公有public的getter和setter方法。

创建完成后,需要编译一下,点击编译按钮,或者Build->Make Project即可,它会自动生成一些数据库文件,也会提示你创建是否有误!

3.增删改查

UserModel people = new UserModel();

        people.name = "张三";
        people.sex = 1;
        people.save();//添加对象,一条一条保存


        //people.update();//更新对象
        //people.delete();//删除对象
      

多对多关系:

@Table(database = DBFlowDatabase.class)
@ManyToMany(referencedTable = UserModel.class)
public class MediaModel extends BaseModel {

加入ManyToMany注解后build,会自动生成中间表,但关系还是需要自己手动维护


一对一,一对多,多对多关系:http://www.jianshu.com/p/e875b16283c6
官方文档:https://github.com/Raizlabs/DBFlow/blob/master/usage2/Intro.md
DBFlow使用手册:https://yumenokanata.gitbooks.io/dbflow-tutorials/content/sql_wrapper_classes.html
原文:http://blog.csdn.net/qq_16131393/article/details/50932020
参考:http://blog.sina.com.cn/s/blog_5d911a3f0101pwiq.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,319评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,988评论 4 60
  • 原创文章 转载请注明出处 文|白色风车骑士 一段感情里,女人的终极问题就是:他爱不爱我。表白之前要问,恋爱的时候要...
    白色风车骑士阅读 281评论 0 2
  • 彩云飞, 韶华倾付无悔, 半载春秋恍如梦, 空山雨来去, 晓月寒几回。 春来青青堤柳垂, 杨絮飘若雪, 桃花粉成堆...
    箐薇阅读 259评论 0 1
  • 一.我的收获 1.情境&冲突 对于学习区和恐慌区的问题,小我会有痛苦情绪进而会想去逃避问题。理性我觉察到有情绪有问...
    许楷模阅读 298评论 1 2