Green Daoの学習使用

7186 ワード

Green Dao:
greenDaoは、SQLiteデータベースにオブジェクトをマッピングする軽量かつ高速なORMソリューションです。
公式サイトのアドレス:http://greenrobot.org/greendao/
グリーンDAO優勢
1、簡素化された倉庫
2、性能を最大化する
3、メモリオーバーヘッドを最小化する
4、使いやすいAPI
5、Androidを高度に最適化する
Green Dao使用
1プロファイルの関連:
compile 'org.greenrobot:greendao:3.2.0'
2 build.gradleで構成する:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
3、カスタムパス
greendao{
schemaVersion 1
daoPackage 'com.greendao.song.greendao'
targetGenDir 'src/main/java'
}
schema Version-->データベースのschemaバージョン番号を指定して、移転などの操作は使うことができます。daoPackage-->daoのパケット名は、デフォルトではentityのカバンです。データベースファイルのディレクトリを生成します。
主要コード
ビーンファイルを作成します。
エンティティコメント:
@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 {
...
}
基礎コメント:
@Entity
public classUser {
@Id(autoincrement = true)
private Long id;

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

@NotNull
private int repos;

@Transient
private int tempUsageCount;

...
}
1.実体@Entityコメント
schema:  GreenDao        schema
active:            ,       、       
nameInDb:         ,           
indexes:    ,       
createInDb:        
2.基礎属性の注釈
@Id :   Long ,    @Id(autoincrement = true)     
@Property:                 ,            :@Property (nameInDb="name")
@NotNul:             
@Transient :                 
3.索引の注釈
@Index:  @Index             ,  name      ,     unique       
@Unique:               
4.関係コメント
@ToOne:        (      )   
@ToMany:            
プロジェクトをコンパイルして、Userエンティティ類は自動的にコンパイルして、get、set方法を生成して、しかもcomp.greendo.genディレクトリの下で3つのファイルを生成して、DaoMaster、DaoSession種類;
作成ヘルプクラス

public class GreenDaoHelper {
private static DaoMaster.DevOpenHelper mHelper;
private static SQLiteDatabase db;
private static DaoMaster mDaoMaster;
private static DaoSession mDaoSession;

/**
* greenDao, Application ;
*/
public static void initDatabase() {
// DaoMaster DevOpenHelper, SQLiteOpenHelper 。
// , 「CREATE TABLE」 SQL , greenDAO 。
// : DaoMaster.DevOpenHelper , , 。
// , , , 。
mHelper = new DaoMaster.DevOpenHelper(MyApplication.context, "cache-db", null);
db = mHelper.getWritableDatabase();
// : DaoMaster, Session 。
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
public static DaoSession getDaoSession() {
return mDaoSession;
}
public static SQLiteDatabase getDb() {
return db;
}

}
添削して調べる
最初にUserDaoオブジェクトを取得します。
mUserDao = GreenDaoHelper.getDaoSession().getUserDao();
増加する
データベースの添削をUserDaoで行います。挿入操作は以下の通りです。
mUser = new User((long)1,"  ");
mUserDao.insert(mUser);//    
Userの最初のパラメータはidです。ここでnullを送ると挿入中にidフィールドが自動的に増えます。
削除
データの削除と修正データの考え方は同じです。データを先に検索します。
List userList = (List) mUserDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list();  
        for (User user : userList) {  
            mUserDao.delete(user);  
        }  
whereは検索条件を表しています。ここではidが10以下のデータを調べています。whereのパラメータは複数あります。つまり、複数のクエリ条件を追加することができます。最後のリストは検索結果がListセットであることを表しています。データを調べたいだけなら、最後のuniqueでいいです。もちろん、私達はidによってデータを削除することもできます。
User user = mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique();  
        if (user == null) {  
            Toast.makeText(MainActivity.this, "     ", Toast.LENGTH_SHORT).show();  
        }else{  
            mUserDao.deleteByKey(user.getId());  
        }  
メインキーから削除
mUserDao.deleteByKey(id);
すべてのデータを削除
mUserDao.deleteAll();
変更
IDに基づいてデータを修正する
mUser = new User((long)2,"anye0803");
mUserDao.update(mUser);
調べます
すべてのデータを検索
List users = mUserDao.loadAll();    
データを調べます
User user = mUserDao.queryBuilder().where(UserDao.Properties.name.eq("  ")).unique();
データベースのアップグレード
1.gradleファイルを変更する
まずmoduleのgradleファイルでバージョン番号を変更します。
//            
schemaVersion 2  
2.エンティティクラスを変更する
@Entity  
public class User {
@Property
private int age;
@Property
private String password;
@Id
private Long id;
@Property(nameInDb = "USERNAME")
private String username;
@Property(nameInDb = "NICKNAME")
private String nickname;
}
コンパイル項目を再現して実行すればいいです。
一般的なデータベースのアップグレードはこれでいいです。特別な状況は自分でデータベースの移行スクリプトを作成する必要があります。この場合はUpgradeHelperをカスタマイズできます。
public class UpgradeHelper extends DaoMaster.DevOpenHelper {

public static String TAG = UpgradeHelper.class.getSimpleName();

public UpgradeHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}

/**
* Here is where the calls to upgrade are executed
* onUpgrade
*/
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {

/* i represent the version where the user is now and the class named with this number implies that is upgrading from i to
i++ schema */
for (int i = oldVersion; i < newVersion; i++) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by migrating all tables data");
// TODO: xxDao
MigrationHelper.getInstance().migrate(db, UserDao.class);
}
}
}