GreenDAO 3.0初回使用

10396 ワード

以前のプロジェクトでGreenDAOを使用していましたが、2を使用しています.Xのバージョンは、まとめるととても使いにくいです.2.Xでは、プロジェクトを新規作成し、プロジェクトで各エンティティのフィールドなどの関連属性を構成し、エンティティおよびDAO操作に関連するクラスを生成します.しかし、エンティティのプロパティの一部を変更し、データベースに保存すると、generatorを再実行するたびに変更が再実行されることがわかります.GreenDAOの大きな変化は注釈とGradleを使用することであり,生成方式も逆方向に変化し,現在はまず自分でエンティティを新規作成し,次にエンティティからDAO操作に関連するクラスを生成する.最新のGreenDAO 3を使用する方法は2つあります.1つは、生成に使用するアイテムを保持する方法と、注釈ベースのエンティティ生成方法を使用する方法です.GreenDAO 3の後、パッケージ名は前のde.greenrobotからorgに変更されたことに気づきます.greenrobot.注意しろdaogeneratorがorgになるgreenrobot.greendao.generator.de.greenrobot.daoがorgになるgreenrobot.greendao.
Gradleの設定:
   build.gradle       :
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
    }
}

// In current version 3.0.0, this must precede the android plugin!
apply plugin: 'org.greenrobot.greendao'

dependencies {
    compile 'org.greenrobot:greendao:3.0.1'
}

それからMake Projectはbuild/generated/source/greendaoで新しく生成された内容を発見します.build/generated/source/greendaoはデフォルトのパスで、構成することができます.構成方法は後述します.
Gradle Pluginの構成
// In the build.gradle file of your app project:
android {
...
}

greendao {
    schemaVersion 2
}

schemaVersionの現在のデータベース構造のバージョン.構造バージョン変更時にOpenHelpersで使用されます.エンティティまたはデータの構造を変更する場合は、この値を増やす必要があります.daoPackageが生成したDAO,DaoMaster,DaoSessionのパッケージ名.デフォルトはエンティティのパッケージ名です.targetGenDirはソースファイルのパスを生成します.デフォルトのソースファイルディレクトリはbuildディレクトリ(build/generated/source/greendao)です.generateTestsは、ユニットテストを自動的に生成するかどうかを設定します.targetGenDirTestが生成したユニットテストのルートディレクトリ.
エンティティ注記:
@Entity(
        //               ,           
        //          
        schema = "myschema",

        //           ,        ,        
        active = true,

        //           
        //             
        nameInDb = "AWESOME_USERS",

        // Define indexes spanning multiple columns here.
        indexes = {
                @Index(value = "name DESC", unique = true)
        },

        // DAO             (   true)
        //          ,        false
        //       GreenDAO      ,     false
        createInDb = false
)
public class User {
  ...
}

なお、Gradle Pluginでは複数のデータベース構造はサポートされていません.
基本的な注記:
@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;

    @Property(nameInDb = "USERNAME")
    private String name;

    @NotNull
    private int repos;

    @Transient
    private int tempUsageCount;

    ...
}

@IdエンティティのID、すなわちデータベース内のプライマリ・キーとしてlong/Longタイプのフィールドを選択します.@Propertyでは、データベース内のフィールドの名前をカスタマイズできます.空の場合、GreenDAOはアルパカ法に従って使用します」分割し、すべて大文字に変更します.userNameがUSER_になるなどです.NAME. @NonNullは、フィールドをデータベース内で空でないフィールドにします.通常、基本タイプにNonNullフラグが付けられます.@Transientにより、フィールドは永続化されません.
索引注記:
@Indexは、対応するフィールドにインデックスを作成します.name:カスタム名のパラメータを使用してカスタマイズできます.Unique:一意性フラグを追加し、値を一意にする必要があります.
@Entity
public class User {
    @Id private Long id;
    @Index(unique = true)
    private String name;
}

@Uniqueデータベース列に一意性制限を追加します.
@Entity
public class User {
    @Id private Long id;
    @Unique private String name;
}

データベース関係注記
@ToOneは一対一の関係を定義します.この注記は、他のエンティティオブジェクトのフィールドに適用されます.GreenDAOは、外部エンティティのIDに対応するフィールドを必要とするため、joinPropertyでこのフィールドを作成します.カスタムがない場合は、フィールドが自動的に生成されます.
@Entity
public class Order {
    @Id private Long id;

    private long customerId;

    @ToOne(joinProperty = "customerId")
    private Customer customer;
}

@Entity
public class Customer {
    @Id private Long id;
}

@ToManyは、複数のエンティティとの関係を定義します.この注記は、他のエンティティ・オブジェクトのセットのフィールドに適用されます.マルチマッピングを実現するには、3つの方法があります.referencedJoinProperty:ターゲットエンティティのソースエンティティに対応する外部キーを指定します.
@Entity
public class User {
    @Id private Long id;

    @ToMany(referencedJoinProperty = "ownerId")
    private List ownedSites;
}

@Entity
public class Site {
    @Id private Long id;
    private long ownerId;
}

joinProperty:複雑な点の関係について@JoinProperty注釈のセットを定義できます.各@JoinProperty注記には、アクティブエンティティのソース属性と対応するエンティティの参照属性が必要です.
@Entity
public class User {
    @Id private Long id;
    @Unique private String authorTag;

    @ToMany(joinProperties = {
            @JoinProperty(name = "authorTag", referencedName = "ownerTag")
    })
    private List ownedSites;
}

@Entity
public class Site {
    @Id private Long id;
    @NotNull private String ownerTag;
}

@JoinEntityはNMマルチペアマルチマッピングを行う場合に使用します
@Entity
public class Site {
    @Id private Long id;

    @ToMany
    @JoinEntity(
            entity = JoinSiteToUser.class,
            sourceProperty = "siteId",
            targetProperty = "userId"
    )
    private List authors;
}

@Entity
public class JoinSiteToUser {
    @Id private Long id;
    private Long siteId;
    private Long userId;
}

@Entity
public class User {
    @Id private Long id;
}

使用感:3.0にアップグレードするたびに生成されるDAO関連ファイルの中でエラーが発生します.一つはDevOpenHelperのメソッド名が変更されたことです.また、DAOsのbindValue(SQLiteStatement,T)には継承関係がありません.
テキストリンク:https://blog.mrli.xyz/greendao3-init-use/