Android Room VS GreenDao
データベース比較{{でーたべーす:ひかく}}
このドキュメントでは、データベース・スキーマGreenDaoとRoomスキーマを比較して、データベース・スキーマの選択を決定します.
データベースの基本操作
エンティティークラス定義
GreenDaoでのエンティティークラスの定義
Roomでのエンティティークラスの定義
エンティティクラスを定義するのは注釈方式で、基本形式はあまり差がありません.
Roomデータベースの使用上の注意点: Room定義エンティティクラスは、GetterとSetterを手動で記述する必要があることに注意してください. 複数のコンストラクション関数が同時に存在するのは、1つのコンストラクション関数のみがRoomライブラリによって呼び出され、他のコンストラクション関数は注記@Ignoreを追加する必要があります. プライマリ・キーの値は空でなければなりません.プライマリ・キーがStringなどに設定されている場合は、注記@NonNull を追加する必要があります.エンティティークラスを有効にするには、Databaseに注記する必要があります. Daoオブジェクトは、開発者が各entityに対応するDaoインタフェースまたは抽象クラスを作成し、@Dao注釈で注釈し、インタフェースに必要なメソッド宣言を提供する必要がある.Roomは対応する実装クラスを自動的に生成し、すべてのメソッドを実装します.
GreenDaoを使用すると、GreenDaoを使用すると、DaoMaster、DaoSession、XXXEntityDaoの3つのクラスが自動的に生成されます.
きほんそうさ
Roomが提供する注釈方法は
Room基本操作に基づくパッケージ最適化により,不要な重複コードを低減する.queryに関連するインタフェースは、SQLコマンドで実現する必要があります.入力はSQLの一部として使用できます.
GreenDaoがAbstractDaoで提供する基本的な操作は
全体的にGreenDaoが提供する操作インタフェースはより豊富です.汎用オブジェクトによる最適化に基づいています.まとめ: GreenDaoとRoomは,エンティティクラスを定義してDaoを取得してデータベースを操作する上で,全体的に差が少なく,その優劣を判断できない. GreenDaoとRoom基本操作では、Roomが提供するインタフェースが少なく、SQLコマンドへの依存度が高く、コンパイル時にSQLコマンドをチェックできる点がありますが、プロジェクトに複数のエンティティクラスがある場合、重複コードが多く発生します.GreenDaoが提供するインタフェースは豊富で、SQL操作をサポートしているが、SQLコマンドを検出することができず、汎用会話操作によって重複コードを減らすことができる.
データベースの高度な操作
完全なクエリ文は次のとおりです.
Roomデータベースの高度な操作には2つの方法があります.
方式1は,インタフェースあるいは抽象クラスにおいて,Queryを注釈することによって実現する.
利点:ASフィールドSQL構文チェック、カラム名、テーブル名、キーワードの構文チェックが可能です.
欠点:入力はSQLに値としてのみ入力でき、カラム名に出入りできません.
方法2:@RawQueryで実現する.
利点:自定化の程度が高い.
欠点:これはコマンドのつなぎ合わせで、SQL構文のチェックができません.
GreenDaoが提供する操作インタフェースは次のとおりです. SQL order by関連インタフェース、QueryBuilder.orderxx() SQL limit関連インタフェース、QueryBuilder.limit() SQL offsetに関するインタフェース、QueryBuilder.offset() はgroupby,having関連インタフェースを提供していないため、この2つのキーワードを使用するには、オリジナルクエリーを使用する必要があります. 小結 高度な操作では、GreenDaoはインタフェースが豊富で、クエリーキャッシュを提供し、効率を提供していますが、クエリーキャッシュの使用が不適切で、問題も発生しやすいです.Room勝はSQL構文チェックを提供していますが、列名は構文チェック項目として使用されるため、インバウンドとして使用できません.場合によってはインタフェースコードが非常に多くなります.
データベースの暗号化
RoomとGreenDao自体はデータベース暗号化をサポートしていません.サードパーティ製ライブラリを導入してデータ暗号化する必要があります.2つのフレームワークは似ています.
データベースのアップグレード
Roomデータベースのアップグレードは、Roomコンパイルによって生成されたテーブル名とカラム名がインスタンスに保存されていないため、SQLコマンドでのみデータベースをアップグレードできます.
SchemaはRoomがデータベース・テーブルを生成することを記述する構造であるため、データベースのアップグレードが要求を満たすかどうかをSchemaで確認できます.
GreenDaoデータベースのアップグレードは、GreenDaoコンパイルによって生成されたテーブル名とカラム名がインスタンスの
まとめ:
データベースのアップグレードの面から言えば、GreenDaoの面では、Roomよりはるかに大きい.
レスポンスプログラミング
RoomはRxJava,LiveDataの2つの方式の応答式プログラミングをサポートしている.
GreenDaoはRxjavaをサポート
その他
RoomはJetpackのコンポーネントの1つとして,LiveData,pagingのようなJetpackの他のコンポーネントと密接な関係がある.
まとめ
RoomデータベースのフレームワークはGreenDaoフレームワークと比較し,RoomとGreenDaoにはそれぞれ勝場がある.現在のところ、プロジェクト自体の状況に応じてデータベースフレームワークを選択することができ、GreenDaoデータフレームワークを使用しているプロジェクトは、Roomデータベースフレームワークに切り替えるのに十分な理由がありません.
このドキュメントでは、データベース・スキーマGreenDaoとRoomスキーマを比較して、データベース・スキーマの選択を決定します.
データベースの基本操作
エンティティークラス定義
GreenDaoでのエンティティークラスの定義
@Entity
public class User{
@Id
private String username;
private String password;
}
Roomでのエンティティークラスの定義
@Entity
public class User {
@PrimaryKey
@NonNull
private String name;
private String pwd
}
@Dao
public interface UserDao {
@Insert
void insertUsers(User ... users);
}
@Database(entities = {User.class},version = 1)
public abstract class ExternRomDb extends RoomDatabase{
public abstract UserDao userDao();
}
エンティティクラスを定義するのは注釈方式で、基本形式はあまり差がありません.
Roomデータベースの使用上の注意点:
GreenDaoを使用すると、GreenDaoを使用すると、DaoMaster、DaoSession、XXXEntityDaoの3つのクラスが自動的に生成されます.
DaoSession daoSession = new DaoMaster(db).newSession();
UserDao dao = daoSession.getUserDao();
きほんそうさ
Roomが提供する注釈方法は
@Insert,@Delete,@Update,@Query, @RawQuery
Room基本操作に基づくパッケージ最適化により,不要な重複コードを低減する.queryに関連するインタフェースは、SQLコマンドで実現する必要があります.入力はSQLの一部として使用できます.
public interface BaseDao<T> {
@Insert
void insert(T ... obj);
@Delete
void delete(T ... obj);
@Update
void update(T ... obj);
}
@Dao
public abstract class UsrDao implements BaseDao<User>{
@Query("select * from User")
abstract List<User> loadAll();
@Query("select * from User where User.name =:name")
People queryById(Stirng name);
}
GreenDaoがAbstractDaoで提供する基本的な操作は
public T load(K key) ; public List<T> loadAll(),public long insert(T entity)
全体的にGreenDaoが提供する操作インタフェースはより豊富です.汎用オブジェクトによる最適化に基づいています.
public interface IDatabase<M, K>{
boolean insert(M m);
boolean delete(M m);
boolean deleteByKey(K key);
...
}
public abstract class AbstractDatabaseManager<M, K> implements IDatabase<M, K>{
@Override
public boolean insert(M m) {
openWritableDb();
getAbstractDao().insert(m);
return true;
}
public boolean delete(M m){
openWritableDb();
getAbstractDao().delete(m);
return true;
}
}
データベースの高度な操作
完全なクエリ文は次のとおりです.
select [distinct] heading from tables where predicate group by columns having predicate order by columns limit count , offset;
Roomデータベースの高度な操作には2つの方法があります.
方式1は,インタフェースあるいは抽象クラスにおいて,Queryを注釈することによって実現する.
利点:ASフィールドSQL構文チェック、カラム名、テーブル名、キーワードの構文チェックが可能です.
欠点:入力はSQLに値としてのみ入力でき、カラム名に出入りできません.
@Query("select * from User where User.pwd >:pwd order by User.name")
List<People> queryWhere(String pwd);
方法2:@RawQueryで実現する.
利点:自定化の程度が高い.
欠点:これはコマンドのつなぎ合わせで、SQL構文のチェックができません.
@RawQuery
List<Cheese> queryRaw(SupportSQLiteQuery query);
void test(String pwd,String orderBy){
String cmd = "select * from User where User.pwd > "+pwd+" order by " +orderBy;
queryRaw(new SimpleSQLiteQuery(cmd));
}
GreenDaoが提供する操作インタフェースは次のとおりです.
データベースの暗号化
RoomとGreenDao自体はデータベース暗号化をサポートしていません.サードパーティ製ライブラリを導入してデータ暗号化する必要があります.2つのフレームワークは似ています.
データベースのアップグレード
Roomデータベースのアップグレードは、Roomコンパイルによって生成されたテーブル名とカラム名がインスタンスに保存されていないため、SQLコマンドでのみデータベースをアップグレードできます.
static final Migration MIGRATION_1_2 = new Migration(1, 2)
{
@Override
public void migrate(@NonNull SupportSQLiteDatabase database)
{
//
}
};
Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, DATABASE_NAME)
.addMigrations(MIGRATION_1_2)
.build();
SchemaはRoomがデータベース・テーブルを生成することを記述する構造であるため、データベースのアップグレードが要求を満たすかどうかをSchemaで確認できます.
GreenDaoデータベースのアップグレードは、GreenDaoコンパイルによって生成されたテーブル名とカラム名がインスタンスの
DaoConfig
に存在するため、統合されたアップグレード方式を作成できます.統計アップグレード方法はMigrationHelperを参照してください.java まとめ:
データベースのアップグレードの面から言えば、GreenDaoの面では、Roomよりはるかに大きい.
レスポンスプログラミング
RoomはRxJava,LiveDataの2つの方式の応答式プログラミングをサポートしている.
GreenDaoはRxjavaをサポート
その他
RoomはJetpackのコンポーネントの1つとして,LiveData,pagingのようなJetpackの他のコンポーネントと密接な関係がある.
まとめ
RoomデータベースのフレームワークはGreenDaoフレームワークと比較し,RoomとGreenDaoにはそれぞれ勝場がある.現在のところ、プロジェクト自体の状況に応じてデータベースフレームワークを選択することができ、GreenDaoデータフレームワークを使用しているプロジェクトは、Roomデータベースフレームワークに切り替えるのに十分な理由がありません.