体验Android ORM之DBFlow
来源:互联网 发布:c语言逻辑或怎么打 编辑:程序博客网 时间:2024/05/22 02:34
DBFlow综合了 Active Android, Schematic, Ollie,Sprinkles 等库的优点;不通过消耗性能的反射而通过注解实现,性能好(Referer);
https://github.com/Raizlabs/DBFlow
1.为什么使用DBFlow?
如果要执行下面这一条SQL语句:
SELECT * FROM Ant where type = 'worker' AND isMale = 0;
如果安安稳稳的使用Android提供的SqliteHelper的话:
String[] args = new String[2];args[0] = "worker";args[1] = "0";Cursor cursor = db.rawQuery("SELECT * FROM Ant where type = ? AND isMale = ?", args);final List<Ant> ants = new ArrayList<Ant>();Ant ant;if (cursor.moveToFirst()) { do { // get each column and then set it on each ant = new Ant(); ant.setId(cursor.getLong(cursor.getColumnIndex("id"))); ant.setType(cursor.getString(cursor.getColumnIndex("type"))); ant.setIsMale(cursor.getInt(cursor.getColumnIndex("isMale") == 1); ant.setQueenId(cursor.getLong(cursor.getColumnIndex("queen_id"))); ants.add(ant); } while (cursor.moveToNext());}
但使用DBFlow:
// main thread retrievalList<Ant> devices = SQLite.select().from(Ant.class) .where(Ant_Table.type.eq("worker")) .and(Ant_Table.isMale.eq(false)).queryList();// Async Transaction Queue Retrieval (Recommended for large queries) SQLite.select() .from(DeviceObject.class) .where(Ant_Table.type.eq("worker")) .and(Ant_Table.isMale.eq(false)) .async().queryList(transactionListener);
简洁,清晰,明了。看起来就很爽,而且想出错都难。
类似于插入,更新,删除都是类似这样简洁。
2.集成
在项目的跟build.gradle中:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0-alpha5' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }}allProjects { repositories { jcenter() // required to find the project's artifacts maven { url "https://jitpack.io" } }}
在app或者Module的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 "com.znn.androiddemo" minSdkVersion 14 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.1' 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}" // sql-cipher database encyrption (optional) compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}"}
(DBFlow是使用apt在编译前动态生成配置的数据库和表的相关Java文件,所以添加完表配置后需要build->Make Project,就会自动在app->build->generated->source->apt->debug->package….->config/db…下生成相应的文件)
配置数据库:
@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)public class AppDatabase { //数据库名称 public static final String NAME = "AppDatabase"; //数据库版本号 public static final int VERSION = 1;}
配置表结构:
@Table(database = AppDatabase.class)public class News extends BaseModel{ @PrimaryKey(autoincrement = true) long id; @Column String title; @Column String url;}
字段必须是包内可访问,或者public或者private(有get/set).
至少有一个主键。继承BaseModel,BaseModel本身已实现save(),insert(),delete()等操作方法。
另外需要在Application的onCreate()方法进行初始化:
FlowManager.init(this);
TIPS:
如果配置好了后,Make Project后,却没有生成_Table, GeneratedDatabaseHolder, _DataBase, _Adapter等,检查都无误后,可以检查一下:
android { compileSdkVersion 23 buildToolsVersion "23.0.2" }
这个参数,之前用 compileSdkVersion 22
的 死活不生成Java文件,搞了一整下午都是泪呀,一点提示都没有。。。。
原文
- 体验Android ORM之DBFlow
- Android高性能ORM数据库DBFlow入门教程
- Android高性能ORM数据库DBFlow入门教程
- Android高性能ORM数据库DBFlow入门
- Android高性能ORM数据库DBFlow入门
- ORM数据库DBFlow入门
- Android DBFlow 超便捷高性能ORM数据库 入门
- Android学习之数据库DBFlow的使用
- ORM体验之旅
- Android数据库DbFlow
- Android框架--DBFlow
- Android ORM之greenDao
- Android数据库框架DbFlow使用
- Android DBFlow数据库入门笔记
- Android ORM框架之 ORMLite
- Android ORM之GreenDao学习
- Android ORM 框架之 ActiveAndroid
- Android ORM系列之ActiveAndroid
- SHELL笔记(二)
- 把二元查找树转变成排序的双向链表
- SHELL笔记之以文件之名(三)
- 如何利用Nginx的缓冲、缓存优化提升性能
- 编译原理-1-词法分析
- 体验Android ORM之DBFlow
- 顺时针打印矩阵
- Android实现沉浸式状态栏
- 在Mac下配置php开发环境:Apache+php+MySql
- Python 数据库MySQL中取出数据
- poj 1364 King
- Android常用的Gradle配置和加速编译
- ZOJ 3929 Deque and Balls (放球问题_DP思维好题)
- Python 把数据存入MySQL数据库