、GreenDao導入
GreenDAOは、オープンソースのAndroid ORM(「オブジェクト/リレーショナルマッピング」)で、ORM(「オブジェクト/リレーショナルマッピング」と呼ばれる)によって、それが私たちの時間のデータベースの開発プロセスを節約します!
GreenDaoことで、我々はより迅速にデータベースを操作することができ、我々は、格納するための単純なオブジェクト指向のAPIを使用して、更新、削除、およびJavaオブジェクトを照会することができます。
GreenDao長所と短所?
1.高性能
2.簡単な関係との接続をカバーする、強力なAPIを使用します
3.最小メモリ消費量
4.ライブラリーサイズ(<100キロバイト)の下限時間を保持し、メソッド65Kを避けるために構築
5.データベース暗号化:greenDAOサポートSQLCipher、ユーザデータのセキュリティを確保します。
GreenDaoコアクラス
GreenDaoは、3つのコアクラスを持っている:すなわちDaoMaster、DaoSession、XXXDao、3つのクラスが独自の創造を記述する必要なしに、自動的に作成されます!
- DaoMaster :: DaoMasterデータベース・オブジェクトとDAOクラス固有のパターンを管理します。これは、テーブルを作成したり削除したりすること静的メソッドを持っています。その内部には、クラスOpenHelperとDevOpenHelper SQLiteOpenHelperが、彼らはSQLiteデータベースにパターンを作成することを実現しています。
- DaoSession:使用可能なすべてのDAOオブジェクト管理特定のパターンは、オブジェクトを取得するには1つのgetterメソッドを使用することができます。DaoSessionはまた、いくつかの一般的な持続性の方法、そのようなエンティティが挿入されているように、ロード、更新、削除、および更新を提供します。
- XXXDao:データアクセスオブジェクト(DAO)と永続的なクエリエンティティ。各エンティティについて、greenDAOはDAOを生成しました。それはDaoSession永続化方式よりも持っています。
- エンティティ:永続オブジェクトです。典型的には、標準Javaプロパティ(例えば、POJOやJavaBean)を使用して、ラインのデータベース・エンティティ・オブジェクトを表します。
二、GreenDao使用
1.インポートのGradleウィジェットコード生成とダオ
AndroidのプロジェクトでGreenDaoを使用するには、プラグインを追加し、GreenDao GreenDao Gradleのライブラリを追加する必要があります。
A)。輸入ウィジェット
// 在プロジェクト的build.gradle文件中添加: buildscript { リポジトリ{ jcenter() mavenCentral()// 追加リポジトリ } 依存関係{ クラスパス 'com.android.tools.build:gradle:3.1.2' クラスパス「org.greenrobot :greendao-のGradle-プラグイン:3.2.2' // プラグインを追加します } }
B)。その依存関係を設定します
// 在Moudle:アプリ的build.gradle文件中添加: 'com.android.application':プラグインが適用され たプラグインを適用する: 'org.greenrobot.greendao' //は、プラグインの適用 の依存{ 実装 greendao:3.2」org.greenrobotを。 2' // ライブラリを追加 }
C)構成データベース情報
{greendao SCHEMAVERSION。1つの// データベースのバージョン番号 daoPackage 'com.renhui.testapp.functions.database.greenDao.db' // 設定DaoMaster、DaoSession、ダオパッケージ名 targetGenDir 'src.main.java' // DaoMaster、DaoSessionを設定し、ダオディレクトリには、このパスを持つことに注意してください。/使用しないでください generateTestsをfalseに// 自動的にテストユニットを生成するために、trueに設定します。 targetGenDirTests「SRC /メイン/ Javaの//は、実質的に生成ユニットテストをカタログ格納する必要があります。デフォルトでは、SRC / androidTest / javaのです。 }
設定は、AndroidのStudioでプロジェクトを作成するプロジェクトをビルド書き換える>ビルドを使用し、完了し、GreenDao統合は完了です!
2.ストレージ・オブジェクトのエンティティクラスを作成します。
GreenDao格納注釈データに格納されたデータのみを使用して、以前に宣言されたクラス@Entityは必要なコードを生成するためGreenDaoをみましょう。
@Entity パブリック クラス学生{ @Id(AUTOINCREMENT = trueに) ロング上記IDを述べ、 @Unique INT studentNo; // 学生ID INT年齢; // 年齢 ストリング携帯; // 電話番号 文字列セックス; // 性別 文字列名; // 名前 アドレス文字列; // 自宅の住所 文字列schoolName; // 学校名の 文字列グレード; // 何年生 ......ゲッターとセッターとコンストラクタメソッド、...... }
3. GreenDao初期化
私たちは、アプリケーションでのグローバルな会話を維持することができます。私たちは、Applicaitonでデータベース操作を初期化します=
/ ** *初始化GreenDao、直接アプリケーションの中进行初始化操作在 * / プライベート 無効initGreenDao(){ DaoMaster.DevOpenHelperヘルパー = 新しい DaoMaster.DevOpenHelper(この、 "aserbao.db" ); SQLiteDatabase DB = helper.getWritableDatabase()。 DaoMaster daoMaster = 新しいDaoMaster(デシベル)。 daoSession = daoMaster.newSession()。 } プライベートDaoSessionのdaoSession。 公共DaoSession getDaoSession(){ 戻りdaoSession。 }
初期化が再度プロジェクトは、文書の3つのタイプを生成targetGenDirディレクトリのセットがありますどのような再構築を完了した後に、これはGreenDaoが自動的に生成されます!データベースの説明は、我々はちょうどライン上でデータベース操作を検索変更する追加と削除に続いする必要があり、接続されていました。
4. GreenDaoはCRUDを実装しました
1.増加
()を挿入する挿入データを
@Override 公共 ボイドinsertData(シングS){ DaoSession daoSession = ((AserbaoApplication)getApplication())getDaoSession()。 以下のために(int型私は0 =;私は1000年の<;私は++ ){ 学生学生 = 新学生(); student.setStudentNo(I); int型の年齢= mRandom.nextInt(10)+ 10 。 student.setAge(年齢); student.setTelPhone(RandomValue.getTel())。 ストリングchineseName = RandomValue.getChineseName()。 student.setName(chineseName)。 もし(I%2 == 0){ student.setSex( "男" ); } 他{ student.setSex( "女" )。 } student.setAddress(RandomValue.getRoad())。 student.setGrade(String.valueOf(年齢 10%)+ "年纪" ); student.setSchoolName(RandomValue.getSchoolName())。 daoSession.insert(学生)。 } }
insertOrReplace()データが存在するが交換され、データが挿入存在しません
@Override 公共 ボイドinsertData(シングS){ DaoSession daoSession = ((AserbaoApplication)getApplication())getDaoSession()。 以下のために(int型私は0 =;私は1000年の<;私は++ ){ 学生学生 = 新学生(); student.setStudentNo(I); int型の年齢= mRandom.nextInt(10)+ 10 。 student.setAge(年齢); student.setTelPhone(RandomValue.getTel())。 ストリングchineseName = RandomValue.getChineseName()。 student.setName(chineseName)。 もし(I%2 == 0){ student.setSex( "M" ); } 他{ student.setSex( "F" ); } student.setAddress(RandomValue.getRoad()); student.setGrade(String.valueOf(年齢 10%)+ "古いです" ) ; student.setSchoolName(RandomValue.getSchoolName()); daoSession.insertOrReplace(学生); // 挿入または交換してください } }
2.削除します
(削除)とDELETEALL();それぞれ、およびすべての削除個人を削除します。そこを削除するには、2つの方法があります。
@Override 公共 ボイドdeleteData(学生S){ DaoSession daoSession = ((AserbaoApplication)getApplication())getDaoSession()。 daoSession.delete(S); } @Override 公共 ボイドDELETEALL(){ DaoSession daoSession = ((AserbaoApplication)getApplication())getDaoSession()。 daoSession.deleteAll(学生。クラス); }
3.変更
アップデートで修正されます:
@Override 公共 ボイドupdataData(学生S){ DaoSession daoSession = ((AserbaoApplication)getApplication())getDaoSession()。 daoSession.update(S); }
4.チャールズ
お問い合わせの方法は以下のとおりです。
- LOADALL():すべてのデータを照会します。
- queryRaw():条件の問い合わせに応じて。
- queryBuilder():簡単に詳細な説明が続くクエリを作成します。
公共リストqueryAll(){ 一覧 <学生>学生= daoSession.loadAll(学生。クラス); 戻る学生を。 } @Override 公共 無効queryData(文字列S){ 一覧 <学生>学生= daoSession.queryRaw(学生。クラス、 "どこのid =?" 、s)は、 mDataBaseAdapter.addNewStudentData(学生)。 }
参考: https://www.jianshu.com/p/53083f782ea2