资讯专栏INFORMATION COLUMN

Android 数据库框架 DBFlow 的使用

UsherChen / 2917人阅读

摘要:是一个基于注解处理器开发的使用方便的数据库,该库简化了很多多余的代码,并且提供了好用的来处理与数据库的交互,让开发者专注的开发。

DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:

DBFlow 的优势

配置 DBFlow

创建数据库

创建表

插入数据

删除数据

更新数据

查询数据

案例

DBFlow 的优势

DBFlow 借鉴了一些其他优秀数据库框架的特性,下面是 DBFlow 的优势,具体如下:

Extensibility(扩展性):对表类的继承类没有限制,可以是一个普通的 JavaBean,使用时为了方便推荐表类继承 BaseModel 类你可以扩展不同包中的非模型类,并将它们用作数据库表,此外,你可以将其他表的子类加入到 @Column 中,并且它们可以位于不同的包中。

Speed(速度):该库基于 Java 的注解处理器生成,使用它对运行时性能几乎没有任何影响(反射仅仅用于生数据库模块的生成),可以节省生成样板代码的时间,支持模型缓存(多主键模型),在可能的情况下比原生的 SQLite 速度要快,支持懒加载、@ForeignKey、@OneToMany等使得查询更有效率。

SQLite Query Flow(SQLite查询流):DBFlow 的查询尽可能的贴近原生 SQLite 查询,如:

select(name, screenSize).from(Android.class).where(name.is("Nexus 5x")).and(version.is(6.0)).querySingle()

Open Source(开源):DBFlow 时开源的,开源地址:Github

Robust(健壮性):支持 Trigger, ModelView, Index, Migration 以及内置的管理数据库的方式, 此外,还支持 SQLCipher, RXJava 等

Multiple Databases, Multiple Modules(多数据库、多模型):无缝支持多数据库文件以及使用 DBFlow 的其他依赖中的数据库模型

Built On SQLite(基于 SQLite):SQLite 是世界上使用最广泛的数据库引擎,它不仅限于某个平台。

配置 DBFlow

因为 DBFlow 任然不是官方发布的,你需要在项目的 build.gradle 文件中进行如下配置,具体如下:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

然后,在 Module 对应的 build.gradle 文件中添加依赖,具体如下:

//为了方便可使用 def 关键字定义版本号
def dbFlow_version = "4.2.4"
dependencies {
    //...
    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}"
}

上面代码中的依赖只是针对于 Java,如果你要使用 Kotlin、RxJava 等要配置相对应的依赖即可。

注意:升级新版本的 DBFlow 时,一定要删除旧版本的依赖,因为新旧版本的注解处理器可能不同,如果未移除旧版本,将会报如下错误,具体如下:

java.lang.NoSuchMethodError: com.raizlabs.android.dbflow.annotation.Table.tableName()Ljava/lang/String

然后,自定义 Application ,在相应的 onCreate() 方法中初始化 DBFlow,具体如下:

/**
 * 自定义Application
 * @author jzman
 * create at 2018/4/16 0016 17:28
 */
public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化DBFlow
        FlowManager.init(new FlowConfig.Builder(this).build());
        //设置日志显示
        FlowLog.setMinimumLoggingLevel(FlowLog.Level.V);
    }
}

最后,在 AndroidManifest.xml 文件中使用自定义的 Application,具体如下:

此时,DBFlow 就引入当前项目中咯。

创建数据库

创建一个类并使用 @Database 注解来定义自己的数据库,该类应该要定义数据库的名称和数据库的版本,具体如下:

/**
 * MyDatabase
 * @author jzman
 * create at 2018/4/17 0017 9:08
 */
@Database(name = MyDatabase.NAME, version = MyDatabase.VERSION)
public class MyDatabase {
    //数据库名称
    public static final String NAME = "MyDatabase";
    //数据库版本号
    public static final int VERSION = 1;
}

注意:如果以后要修改任意表的结构,为避免与旧版本数据库冲突一定要修改版本号,且保证版本号只升不降。

创建表

在已经创建好数据库的前提下就可以创建表了,表的模型类一般需要继承 BaseModel,并为模型类中的每个字段添加 @Column 注解,该注解将映射模型类的字段到对应表中的列,定义一张表具体如下:

/**
 * NoteTable.java
 * @author jzman
 * create at 2018/4/17 0017 9:54
 */
@Table(database = MyDatabase.class)
public class NoteTable extends BaseModel {
    @Column
    @PrimaryKey
    int id;
    @Column
    private String title;
    @Column
    private String date;
    @Column
    private String content;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

注意:在一张表中至少必须定义一个字段作为主键(primary key),如果模型类中某个字段是私有的,一定要定义相应的 getter、setter 方法,否则会在创建表的环节失败,表的命名要使用驼峰命名法,否则可能会出现如此下问题:

java.lang.IllegalArgumentException: expected type but was null
插入数据

使用 DBFlow 插入数据常用的有二种方式,具体如下:

model.insert()

SQLite.insert()

前者用于单个模型类对象的的插入,创建完具体的对象后,调用 model.insert() 即可插入该对象所对应的记录;后者使用 SQLite Wrapper Language 来插入数据,类似于原生的 insert 语句,支持多列数据的插入,使用起来比较方便,具体参考如下:

/**
 * 插入数据
 * @param model
 */
public void inseartData(NoteBean model){
    //1.model,insert()
    model.setTitle("title");
    model.setDate("2018-04-17");
    model.setContent("content");
    model.insert();
    //2.SQLite.insert()
    SQLite.insert(NoteBean.class)
            .columns(NoteBean_Table.title,NoteBean_Table.date,NoteBean_Table.content)
            .values("title","2018-04-17","content")
            .execute();
}
删除数据

使用 DBFlow 删除数据常用的有二种方式,具体如下:

model.delete():删除某条记录

SQLite.delete():根据条件删除

前者用于单个模型类对象的的删除,创建完具体的对象后,调用 model.delete() 即可删除该对象所对应的记录;后者使用 SQLite Wrapper Language 来条件删除数据,类似于原生的 delete 语句,使用起来比较方便,具体参考如下:

/**
 * 删除数据
 * @param model
 */
public void deleteData(NoteBean model){
    //1.model.delete()
    model.delete();
    //2.SQLite.delete()
    SQLite.delete(NoteBean.class)
            .where(NoteBean_Table.title.is("title"))
            .and(NoteBean_Table.id.is(10))
            .async()
            .execute();
    //删除整张表
    Delete.table(NoteBean.class);
    //删除多张表
    Delete.table(NoteBean.class,NoteBean1.class);
}
更新数据

使用 DBFlow 删除数据常用的有二种方式,具体如下:

model.update():更新某条记录

SQLite.update():根据条件更新某条记录

前者用于单个模型类对象的的更新,创建完具体的对象后,调用 model.update() 即可更新该对象所对应的记录;后者使用 SQLite Wrapper Language 来条件删除数据,类似于原生的 update 语句,使用起来比较方便,具体参考如下:

/**
 * 更新数据
 * @param model
 */
public void updateData(NoteBean model) {
    //1.model.update()
    model.update();
    //2.SQLite.update()
    SQLite.update(NoteBean.class)
            .set(NoteBean_Table.title.eq("title"),
                    NoteBean_Table.content.eq("content"))
            .where(NoteBean_Table.id.is(10))
            .async()
            .execute();
}
查询数据

查询使用 SQLite.select() 方法,查询还有许多可以作为条件的关键字,这里就不在赘述了,下面是一个开发者做常用的查询,具体参考如下:

/**
 * 查询数据
 */
public List queryData(){
    //根据条件查询
    List noteBeans = SQLite.select()
            .from(NoteBean.class)
            .where(NoteBean_Table.title.is("title"))
            .queryList();
    return noteBeans;
}

注意:对于插入、更新操作可以使用 model.save() 方法。

案例

上文中介绍了 DBFlow 的配置以及增删改查等基本操作,DbFlow 还有其他比较高级的用法,比如使用 Transactions 来进行数据的安全操作等,下面写一个简单的案例来结束对 DBFlow 的学习,具体效果如下:

更多关于 DBFlow 的知识请参考 DBFlow 的 GitBook 。

可以关注微信公众号:jzman-blog,一起交流学习。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110816.html

相关文章

  • Android 据库框架 DBFlow 使用

    摘要:是一个基于注解处理器开发的使用方便的数据库,该库简化了很多多余的代码,并且提供了好用的来处理与数据库的交互,让开发者专注的开发。 DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:...

    godlong_X 评论0 收藏0
  • Android 据库框架 DBFlow 使用

    摘要:是一个基于注解处理器开发的使用方便的数据库,该库简化了很多多余的代码,并且提供了好用的来处理与数据库的交互,让开发者专注的开发。 DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:...

    wushuiyong 评论0 收藏0
  • Android 据库框架 DBFlow 使用

    摘要:是一个基于注解处理器开发的使用方便的数据库,该库简化了很多多余的代码,并且提供了好用的来处理与数据库的交互,让开发者专注的开发。 DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:...

    AWang 评论0 收藏0
  • Android 据库框架 DBFlow 使用

    摘要:是一个基于注解处理器开发的使用方便的数据库,该库简化了很多多余的代码,并且提供了好用的来处理与数据库的交互,让开发者专注的开发。 DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:...

    Caizhenhao 评论0 收藏0
  • DBFlow(4.2)新版使用

    摘要:新版使用一介绍是一个基于注解处理器的框架。此框架设计为了速度性能和可用性。二特性无缝支持多个数据库使用提高速度类库可以直接解析像这样的数据增加灵活性的丰富接口。还有另一中更接近语法的方式。DBFlow新版使用 一、DBFlow4.2.4介绍 DBFlow是一个基于AnnotationProcessing(注解处理器)的ORM框架。此框架设计为了速度、性能和可用性。消除了大量死板的数据库代码,...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<