• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android高性能ORM数据库DBFlow入门,ormdbflow

Android高性能ORM数据库DBFlow入门,ormdbflow

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android dbflow,android orm框架,android orm是什么,dbflow,android性能优化等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android高性能ORM数据库DBFlow入门,ormdbflow


DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点。同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后。基于注解,使用apt技术,在编译过程中生成操作类,使用方式和ActiveAndroid高度相似,使用简单。

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

DBFlow在国内可能用的人不是很多,所以中文介绍很少,所以就有了这篇文章,接下来就让我们一起学习DBFlow。

一、引入依赖、初始化

需要引入apt和maven,配置项目的 build.gradle

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0-beta6'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

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

配置app的build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
def dbflow_version = "3.0.0-beta4"
android {
  compileSdkVersion 23
  buildToolsVersion "23.0.2"

  defaultConfig {
    applicationId "cn.taoweiji.dbflowexample"
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
  }
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  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}"
}

需要在Application的onCreate对DBFlow进行初始化

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        FlowManager.init(this);
    }
}

记得修改AndroidManifest.xml

<application
    android:name=".MyApplication"
../>

二、数据库创建、表创建

定义数据库

我这里定义了一个名称叫做AppDatabase的数据库,可以根据自己的喜欢进行定义。

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

创建数据库对象

必须继承BaseModel,BaseModel包含了基本的数据库操作(save、delete、update、insert、exists),看下面代码可以发现这个表是关联上面定义的数据库,People的id是自增的id。

@ModelContainer
@Table(database = AppDatabase.class)
public class People extends BaseModel {
    //自增ID
    @PrimaryKey(autoincrement = true)
    public Long id;
    @Column
    public String name;
    @Column
    public int gender;
}

编写完数据表对象后,点击Android studio的build->Make Project(Mac的童鞋直接command+F9)就会使用apt进行了编译,

查看目录(我的people类放在cn.taoweiji.dbflowexample.db)

app/build/generated/source/apt/debug/cn/taoweiji/dbflowexample/db

就可以看到自动生成 People_Adapter、People_Container、People_Table,其中People_Table在后面使用有很大的作用,建议详细看看它的结构。

三、增删改

由于数据表对象继承了BaseModel,已经包含了很多的操作

People people = new People();
people.name = "Wiki";
people.gender = 1;
people.save();
//people.update();
//people.delete();
Log.e("Test", String.valueOf(people.id));

删除、更新等操作就自己体验,这里就不多说了。

四、查询

//返回所有查询结果
List<People> peoples = new Select().from(People.class).queryList();
//返回单个查询结果
People people = new Select().from(People.class).querySingle();
//查询gender = 1的所有People
List<People> peoples2 = new Select().from(People.class).where(People_Table.gender.eq(1)).queryList();

DBFlow的查询方式借鉴ActiveAndroid的,但是比ActiveAndroid功能还要强大。

四、事务、批量保存

事务是一个数据必须具备的,如果保存10000条数据,一条一条保存必然是很慢的,所以就需要用到事务,批量保存。DBFlow的事务非常的强大,同时使用也很复杂,这里就简单介绍批量保存,更多内容请查看官方文档

https://github.com/Raizlabs/DBFlow/blob/master/usage/Transactions.md

List<People> peoples = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    People people = new People();
    people.name = "Wiki";
    people.gender = 1;
    peoples.add(people);
}
//实时保存,马上保存
new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)).onExecute();
//异步保存,使用异步,如果立刻查询可能无法查到结果
//TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)));

五、数据库升级(增加表、增加字段等)

如果是新增表无需做特别的处理,直接修改AppDatabase的版本号即可。

如果需要新增字段,除了需要修改AppDatabase的版本号外,还需要做特殊的处理,DBFlow的描述是:Migrations。

例子:对People新增一个email字段

第1步,修改数据库版本号

@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {
  //数据库名称
  public static final String NAME = "AppDatabase";
  //数据库版本号,这里修改2
  public static final int VERSION = 2;
}

第2步,需要修改数据表对象结构,增加email

@ModelContainer
@Table(database = AppDatabase.class)
public class People extends BaseModel {
    //自增ID
    @PrimaryKey(autoincrement = true)
    public Long id;
    @Column
    public String name;
    @Column
    public int gender;
    @Column
    public String email;
}

第3步,执行第二步之后,需要build(Android studio的build->Make Project、Mac的童鞋直接command+F9),通过apt更新People_Table,接下来编写Migrations

@Migration(version = 2, database = AppDatabase.class)
public class Migration_2_People extends AlterTableMigration<People> {

    public Migration_2_People(Class<People> table) {
        super(table);
    }

    @Override
    public void onPreMigrate() {
        addColumn(SQLiteType.TEXT, People_Table.email.getNameAlias().getName());
    }
}

类名可以更加自己喜欢定义,我个人的规则是,按照数据库版本号和需要更新的数据表来命名,需要注意是:version = 2

数据库升级就大功告成了。

总结:这篇文章只是简单介绍了DBFlow的基本功能使用,DBFlow还有很多很厉害的功能,比如多数据库支持、Powerful Model Caching等,而且还支持Kotlin语言(运行在Java虚拟机的新语言)。我只使用过greenDAO、activeAndroid、afinal、DBFlow数据库,所以在我看来,DBFlow是我用过的数据库当中最好用的数据库,性能也很好,使用非常简单,高度推荐。

我在github上共享一下DBFlow的配置

https://github.com/taoweiji/DBFlowExample

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android高性能ORM数据库DBFlow入门,ormdbflow

相关文章

  • 2017-05-26Your project path contains non-ASCII characters,containsnon-ascii
  • 2017-05-26Activity与Service进行数据交互,activityservice
  • 2017-05-26安卓开发与分析者的利器--安卓右键工具
  • 2017-05-26Andriod DiskLruCache的使用案例
  • 2017-05-26内核内存分配常用函数使用
  • 2017-05-26Android入门(一),Android入门(
  • 2017-05-26Android中的属性动画(Property Animation)——Android开发艺术探索笔记
  • 2017-05-26安开发卓之Notification(一)代码直接能用,安开发notification
  • 2017-05-26保持listview当前位置,listview当前位置
  • 2017-05-26Android中隐藏顶部状态栏的那些坑,android顶部状态栏

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 2.3.3 Button(按钮)与ImageButton(图像按钮)
    • Android学习--RelativeLayout相对布局
    • 我的android学习经历16,android学习经历16
    • Android 之 图片压缩
    • 解决CentOS 7 history命令不显示操作记录的时间和用户身份问题
    • 【Android性能工具】腾讯开源工具APT,androidapt
    • compileDebugJavaWithJavac,compiledebugjava
    • SDK manager.exe 运行时报错:系统找不到指定的文件 android.bat,sdkmanager.bat
    • 精品干货丨APP常用导航框架,干货丨app导航
    • 自定义Toast的显示位置和显示内容,自定义toast

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有