GreenDao 2.2 GreenDao 3.0のアップグレードに適した方法

4701 ワード

前言.なぜGreendao 3.0にアップグレードしたのですか?
1.複数開発
従来のデータベース構築テーブル構築Daoなどの操作で新たにmoduleを開き、統合された場所でデータベース構築テーブルを管理していたが、現在はEntityを直接書くことができるようになった.多くの人が開発する時、自分で自分のEntityを管理すれば、以前のように衝突して犬になる必要はありません.
2.構造が簡潔で便利である
従来はCreateTable addEntity(")などの方法で表を作成していましたが、現在はEntityで3.0の注釈文法を使うだけです
3.注記の使用
以前のEntityは常に生成され上書きされていたので、Entityのコードを変更することは推奨されなかったので、Entityに注釈を付けることができず、gsonの@SerializedName(「id」)という戻りフィールドと自作フィールドが異なる注釈を放棄することになった.3.0以降Greendao自身が注釈を使っているので、私たちも使えます.
4.データベースのセキュリティ
 データベース暗号化3.0のGreenDaoは、独自の暗号化機能を提供しています.
 
アップグレードの道
公式サイトによると、ここのアップグレードには2つの道があります.1つは、以前にコードを生成したモジュールを保持し、もう1つはエンティティクラスを移行し、以前の他の生成ファイルを削除することです.ここでは2つ目の方法をお勧めします.1つ目は、アップグレードが徹底していないと穴が開くような気がします.
 
1.前のEntityを保持
ここではフォルダ内のEntityを移行し、以前の生成構成を直接削除することを選択できます.
settings.gradleの中のincludeは前のmoduleを削除し、メインbuild.gradleのpreBuild.dependsOnのモジュールも削除します.
2.gradleのアップグレード
build.gradleのdependenceでバージョン番号をアップグレードし、次のように変更します.
compile 'org.greenrobot:greendao-generator:3.0.0'
compile 'org.greenrobot:greendao:3.0.1'  

 
3.構成変更先アドレス
以前に生成に使用したModuleを廃棄したので、以前にModuleに配置したものを工事のbuild.gradleに補充します.
上部に
apply plugin: 'org.greenrobot.greendao'

dependencies{}の下に
greendao {
    targetGenDir 'src/main/java'  //        
    daoPackage 'com.XXX.platform.dao'
}

 
4.派生部分を削除し、注記、プライマリ・キー、依存、entityを加える
以前のコードの派生コードを削除します.getter setterメソッドなど、コメントに包まれているコード/*ToOne*/ 以下のように削除できます.
    /** To-one relationship, resolved on first access. */
    public OrderBase getOrderBase() {
        Long __key = this.orderId;
        if (orderBase__resolvedKey == null || !orderBase__resolvedKey.equals(__key)) {
            if (daoSession == null) {
                throw new DaoException("Entity is detached from DAO context");
            }
            OrderBaseDao targetDao = daoSession.getOrderBaseDao();
            OrderBase orderBaseNew = targetDao.load(__key);
            synchronized (this) {
                orderBase = orderBaseNew;
            	orderBase__resolvedKey = __key;
            }
        }
        return orderBase;

前にこのコメントに包まれていた属性を削除し、前に@Transientを付けます.
// KEEP INCLUDES - put your custom includes here
//     
// KEEP INCLUDES END
   
// KEEP FIELDS - put your custom fields here
//   getter setter  
// KEEP FIELDS END

次のgetsetメソッドは保持したり、削除して再生成したりすることができます.しかし、ここで@Transient注釈を付けた属性はgetsetメソッドを自動的に生成しないので、runが一度生成してから@Transient注釈を加えることができます.
次に、以前にテーブルを作成した古いコードの特殊な書き方を、新しいバージョンの注釈の書き方に変更します.
この過程でRunを頻繁に変更する可能性があります.この場合、buildのときにこれらのDaoになってから、ビジネスのコードをコンパイルするため、工事中の様々な赤い線を考慮しないことができます.だから、次のエラーがgreendaoとは関係ないのを見たら、こちらが通過したことを説明します.グリーンdaoの生成エラーであれば心配する必要はありませんが、これらのエラーの記述は正確な位置と非常に分かりやすいものです.
いくつかのエラーが表示されます.
Error:Execution failed for task ':platform:greendao'.
> Currently only single FK columns are supported: ToOne 'orderBase' from OrderXXX to OrderBase

プライマリ・キーは追加されていません
Error:Execution failed for task ':platform:greendao'.
> Can't replace field in /Users/dsx/Documents/XXX/platform/src/main/java/com/XXX/platform/bean/OrderXXX.java:43 with generated version.//       
                      If you would like to keep it, it should be explicitly marked with @Keep annotation.
                      Otherwise please mark it with @Generated annotation

@keepを付ける必要があります
Error:Execution failed for task ':platform:greendao'.
> Can't add field `Variable(type=VariableType(name=com.xxx.platform.dao.OrderBase, isPrimitive=false, originalName=OrderBase, typeArguments=null), name=orderBase)` //    
for entity OrderXXX due to: Unsupported type com.xxx.platform.dao.OrderBase

表関係を設定する必要があります.ToOneかToManyが漏れているはずです
 
5.前後文法の比較
一般的には、このようなアップグレード操作をする前に3.0文法について知っているはずですが、よく知らない場合は、この文章の注釈部分を見てみましょう.前の2.2のあるコードは3.0のある注釈に変更すべきです
http://www.cnblogs.com/dsxniubility/p/5699543.html
 
6.パッケージ名ファイルを置き換える
全文検索パッケージ名を次の
// old package name
import de.greenrobot.dao.database.Database;
...
 
// new package name
import org.greenrobot.greendao.database.Database;
...

 
7.最終的にいくつかのコンパイルエラーを解決する
1.DaoOpenHelperからDevOpenHelperに変更
2.sqldatabaseをdatabaseに変更
3.getWritableDatabase()をgetWritableDb()に変更
 
これで完了