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:
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'
}
 
  
  mavenCentral()//       , AS ,    ,      JCenter()   ,         
ここでbuild.gradleには2つ、1つのappにはもう1つのProjectがあります.彼らの違いは,後者がメンバー変数に相当し,mouleを新規作成する際に直接使用できることである.
コンパイル速度が大幅に低下するため、複数のmoduleは推奨されません.もちろん、パソコン配置NBの勝手さは
戻る:
1 build.gradle(プロジェクト)に追加
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
build.gradle(app)に追加
 apply plugin: 'org.greenrobot.greendao'
 compile 'org.greenrobot:greendao:3.2.0'
apply plugin: 'org.greenrobot.greendao'
これはプラグインです.moduleが実行するコンパイルスクリプトです.デフォルトでは
apply plugin: 'com.android.application'
は、私たちが実行しているスクリプトがアプリケーションであり、実行可能なandroidプロジェクトであることを示しています.
この言葉を添えて  GreenDaoを実行できるスクリプトです.
次は追加完了後のスクリーンショットです
build.gradle(Project):
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
}
   build.gradle(app):
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'
}
使用できるようになりました.
保存するエンティティ・クラスに注釈を付けます.
@Entity //         
public class FocusImageEntity {
    @Id   //  ,     
    private Long id;
    private String shortTitle;
それから小さな緑のハンマー(ショートカットキーCtrl+F 9)--make Projectをクリックしてスクリプトを1回実行させます
もし间违ったら、焦らないでください:これは彼が自动的に构造方法を生成するためで、あなたは自分で构造方法を作成して削除するだけでいいです!!!
2つの構築方法が生成されます.1つはパラメータなしで、1つは全属性です.getとsetメソッドも自動的に生成されますので、書いても大丈夫です.
そして使用開始
まずテーブルを作成し、
mSession = DaoMaster.newDevSession(this, "data-db");
//private DaoSession mSession; 
 
  
// mSession      ,
//DaoMaster.newDevSession()      ,1     。2   
//文の追加
 
  
@Override   
public void onResponse(Call call, Response response) {
//ここではretrofitフレームを使っています.中の
 
  
//onResponse    ,
HomeEntity body=response.body()
;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//     。
where     ,
以下に削除を言いますが、削除はidによって削除されます.オブジェクトを削除しても、結局はidの指向に基づいています.
すべてを削除し、すべてのデータベースのデータを消去します.彼は追加文とあまり違いません.
mSession.getFocusImageEntityDao().deleteAll();
直接idを削除してもOKです.
 //   long    key,      id,    ,  id     ,
mSession.getFocusImageEntityDao().load((long) 15036);
//!!!!!!!!!!!!!!!!!!!!ポイントが来た
最後にデータベースのアップグレードについてお話しします.これは穴です.公式ホームページには説明がありません.ソースコードを見てください.
    @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);
    }
}
データベースがアップグレードする時すべての表を削除して、前のデータは保存することができなくて、しかし比較的に良いのは1つのLogがあります
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);
    }
バージョンがアップグレードされ、同じテーブルのデータもなくなりました.