GreenDao使用
14831 ワード
GreenDao--データベースの3つのフレームワークは、Negative Androidに比べて、オリジナルであり、ストレージ速度は速いが、Realmに比べてやや不足している.
Realmと同様に、コンパイル時にコードが生成され、ORM(オブジェクト関係マッピング)が生成され、実行時に呼び出されるのが他のものよりも速くなります.
標準的なORMフレームワークです
ORMには3つのものが必要です.1データソース
2データベースリンクオブジェクト
3データベース
使用方法を説明します.
まず依存をインポートするには、3つのステップが必要です.GreenDaoのGitHubのホームページを見てみましょう
Add the following Gradle configuration to your Android project:
Realmと同様に、コンパイル時にコードが生成され、ORM(オブジェクト関係マッピング)が生成され、実行時に呼び出されるのが他のものよりも速くなります.
標準的なORMフレームワークです
ORMには3つのものが必要です.1データソース
2データベースリンクオブジェクト
3データベース
使用方法を説明します.
まず依存をインポートするには、3つのステップが必要です.GreenDaoのGitHubのホームページを見てみましょう
Add the following Gradle configuration to your Android project:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
apply plugin: 'org.greenrobot.greendao'
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
ここでbuild.gradleには2つ、1つのappにはもう1つのProjectがあります.彼らの違いは,後者がメンバー変数に相当し,mouleを新規作成する際に直接使用できることである.mavenCentral()// , AS , , JCenter() ,
コンパイル速度が大幅に低下するため、複数のmoduleは推奨されません.もちろん、パソコン配置NBの勝手さは
戻る:
1 build.gradle(プロジェクト)に追加build.gradle(app)に追加classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
apply plugin: 'org.greenrobot.greendao'
内compile 'org.greenrobot:greendao:3.2.0'
これはプラグインです.moduleが実行するコンパイルスクリプトです.デフォルトではapply plugin: 'org.greenrobot.greendao'
は、私たちが実行しているスクリプトがアプリケーションであり、実行可能なandroidプロジェクトであることを示しています.apply plugin: 'com.android.application'
この言葉を添えて GreenDaoを実行できるスクリプトです.
次は追加完了後のスクリーンショットです
build.gradle(Project):build.gradle(app):buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
使用できるようになりました.apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.qiaoyanqing.ximalatapractice" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } dataBinding{ enabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.0.1' testCompile 'junit:junit:4.12' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.android.support:recyclerview-v7:25.0.1' compile 'org.greenrobot:greendao:3.2.0' }
保存するエンティティ・クラスに注釈を付けます.それから小さな緑のハンマー(ショートカットキーCtrl+F 9)--make Projectをクリックしてスクリプトを1回実行させます@Entity // public class FocusImageEntity { @Id // , private Long id; private String shortTitle;
もし间违ったら、焦らないでください:これは彼が自动的に构造方法を生成するためで、あなたは自分で构造方法を作成して削除するだけでいいです!!!
2つの構築方法が生成されます.1つはパラメータなしで、1つは全属性です.getとsetメソッドも自動的に生成されますので、書いても大丈夫です.
そして使用開始
まずテーブルを作成し、mSession = DaoMaster.newDevSession(this, "data-db");
//private DaoSession mSession;
// mSession ,
//文の追加//DaoMaster.newDevSession() ,1 。2
//ここではretrofitフレームを使っています.中の@Override public void onResponse(Call
call, Response response) { HomeEntity body=response.body()//onResponse ,
;FocusImages images=body.getFocusImages()
;
if (images !=
null) {
mSession.getFocusImageEntityDao().insertOrReplaceInTx(images.getList())
;}//個人的にはinsertOrreplaceを使うことをお勧めします.
//データベースを印刷するList
entities = mSession.getFocusImageEntityDao().loadAll(); ここで注意したいのは、初めて運行する時、印刷しないで、退出して再び入ることができて、初めての時表の中にデータがないためです.for (FocusImageEntity entity : entities) { Log.d("oncreate",entity.getShortTitle()); }
まだ空ではない判断が必要です.そうしないと、プログラムが間違ってしまいます.
//次は単一のクエリーです.ここのidはデータベースにあります.List
entities = session.getFocusImageEntityDao().queryBuilder() .where(FocusImageEntityDao.Properties.Id.eq(13056)) .list();// listLazy(), // session.getFocusImageEntityDao().load() for (FocusImageEntity entity : entities) { Log.d(TAG, "onCreate: " + entity.getShortTitle()); } Properties// ,. ,
queryBuilder// 。
以下に削除を言いますが、削除はidによって削除されます.オブジェクトを削除しても、結局はidの指向に基づいています.where ,
すべてを削除し、すべてのデータベースのデータを消去します.彼は追加文とあまり違いません.直接idを削除してもOKです.mSession.getFocusImageEntityDao().deleteAll();
//!!!!!!!!!!!!!!!!!!!!ポイントが来た// long key, id, , id , mSession.getFocusImageEntityDao().load((long) 15036);
最後にデータベースのアップグレードについてお話しします.これは穴です.公式ホームページには説明がありません.ソースコードを見てください.データベースがアップグレードする時すべての表を削除して、前のデータは保存することができなくて、しかし比較的に良いのは1つのLogがあります@Override public void onUpgrade(Database db, int oldVersion, int newVersion) { Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); dropAllTables(db, true); onCreate(db); } }
dropAllTables(db, true);
これは穴で、本当に穴です.これはデータベースのソースです.現在のバージョンはpublic class DaoMaster extends AbstractDaoMaster { public static final int SCHEMA_VERSION = 1; /** Creates underlying database table using DAOs. */ public static void createAllTables(Database db, boolean ifNotExists) { FocusImageEntityDao.createTable(db, ifNotExists); }
そして私たちはアップグレードを行い、アップグレードはSCHEMA_VERSION = 1;
build.gradle(app)で
追加:そして同期//で発見greendao { schemaVersion 2 }
バージョンがアップグレードされ、同じテーブルのデータもなくなりました.public class DaoMaster extends AbstractDaoMaster { public static final int SCHEMA_VERSION = 2; /** Creates underlying database table using DAOs. */ public static void createAllTables(Database db, boolean ifNotExists) { FocusImageEntityDao.createTable(db, ifNotExists); }