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の設定:
それからMake Projectはbuild/generated/source/greendaoで新しく生成された内容を発見します.build/generated/source/greendaoはデフォルトのパスで、構成することができます.構成方法は後述します.
Gradle Pluginの構成
schemaVersionの現在のデータベース構造のバージョン.構造バージョン変更時にOpenHelpersで使用されます.エンティティまたはデータの構造を変更する場合は、この値を増やす必要があります.daoPackageが生成したDAO,DaoMaster,DaoSessionのパッケージ名.デフォルトはエンティティのパッケージ名です.targetGenDirはソースファイルのパスを生成します.デフォルトのソースファイルディレクトリはbuildディレクトリ(build/generated/source/greendao)です.generateTestsは、ユニットテストを自動的に生成するかどうかを設定します.targetGenDirTestが生成したユニットテストのルートディレクトリ.
エンティティ注記:
なお、Gradle Pluginでは複数のデータベース構造はサポートされていません.
基本的な注記:
@IdエンティティのID、すなわちデータベース内のプライマリ・キーとしてlong/Longタイプのフィールドを選択します.@Propertyでは、データベース内のフィールドの名前をカスタマイズできます.空の場合、GreenDAOはアルパカ法に従って使用します」分割し、すべて大文字に変更します.userNameがUSER_になるなどです.NAME. @NonNullは、フィールドをデータベース内で空でないフィールドにします.通常、基本タイプにNonNullフラグが付けられます.@Transientにより、フィールドは永続化されません.
索引注記:
@Indexは、対応するフィールドにインデックスを作成します.name:カスタム名のパラメータを使用してカスタマイズできます.Unique:一意性フラグを追加し、値を一意にする必要があります.
@Uniqueデータベース列に一意性制限を追加します.
データベース関係注記
@ToOneは一対一の関係を定義します.この注記は、他のエンティティオブジェクトのフィールドに適用されます.GreenDAOは、外部エンティティのIDに対応するフィールドを必要とするため、joinPropertyでこのフィールドを作成します.カスタムがない場合は、フィールドが自動的に生成されます.
@ToManyは、複数のエンティティとの関係を定義します.この注記は、他のエンティティ・オブジェクトのセットのフィールドに適用されます.マルチマッピングを実現するには、3つの方法があります.referencedJoinProperty:ターゲットエンティティのソースエンティティに対応する外部キーを指定します.
joinProperty:複雑な点の関係について@JoinProperty注釈のセットを定義できます.各@JoinProperty注記には、アクティブエンティティのソース属性と対応するエンティティの参照属性が必要です.
@JoinEntityはNMマルチペアマルチマッピングを行う場合に使用します
使用感:3.0にアップグレードするたびに生成されるDAO関連ファイルの中でエラーが発生します.一つはDevOpenHelperのメソッド名が変更されたことです.また、DAOsのbindValue(SQLiteStatement,T)には継承関係がありません.
テキストリンク:https://blog.mrli.xyz/greendao3-init-use/
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/