05-Androidデータベースフレームワークの簡単な操作
10142 ワード
現在のプロジェクト開発では、SQL文を手書きで書くことなく、直接SQLiteデータベースにオブジェクトをマッピングできるデータベースフレームワークが避けられません.本稿で紹介するgreenDao、LitePalは軽量で高速なORMソリューションであり、私たちの開発効率、滴滴、運転を大幅に向上させました.
一、greenDao使用マニュアル
GreenDAOのgithubアドレス:https://github.com/greenrobot/greenDAO
1、まずgradle導入を行うには、ASに配置する必要がある
次にプロジェクトrootのbuild.gradle加入
最後にappのbuild.gradleの参加:
構成が完了すると、AS->build->Make Projectの後、フレームワークはtargetGenDirのパスの下で使用したファイルを自動的に生成します.
2、ユーザーを配置して、開発作業を行い、新しいエンティティクラスを作成することができる.
新しいエンティティークラス、フレームワークは自動的にMessageDaoクラスを生成します
では、次はこのMessageDaoクラスをどのように使用すればいいのでしょうか.
グローバルクラスでDaoSessionエンティティを定義し、このDaoSessionオブジェクトを使用して各エンティティDaoのインスタンスを取得し、コードを参照してください.
次に使用する場所でDaoインスタンスを入手します
追加
検索
削除
変更
データベースのアップグレード
3、greenDaoの中のいくつかの注釈を紹介し、実体注釈を開発するのに便利である.
基本プロパティ注記
索引注記
リレーショナル注記
さて、greenDaoについてはここまでご紹介しますが、このライブラリはandroidシステムに最適化されています.メモリのオーバーヘッドが小さく、APIも使いやすいので、自分で研究してみましょう.
一、LitePal使用マニュアル
LitePalのgithubアドレス:https://github.com/LitePalFramework/LitePal
1、gradle導入、最新バージョン、githubで自分で見る
2、assetsフォルダでlitepalを新規作成して構成する.xmlファイル
3.LitePalApplicationを構成し、LitePalApplicationを継承できる
構成が完了すると、開発作業が開始されます.
1、エンティティクラスを作成し、データベースのテーブルに対応し、DataSupportを継承しなければならない
エンティティクラスはlitepalで必要です.xmlでの構成
2、データベース操作
追加
検索
削除
変更
データベース非同期アクション
findAllAsyncはデータベースを非同期で検索し、結果はonFinishで返されます.
非同期ストレージデータ
litePalは郭霖郭神が書いたオープンソースのフレームワークで、皆さんはソースコードを見て勉強することに興味があります.
まとめ
この2つのフレームワークのほかに、ormLite、Realmなどのフレームワークもありますが、個人的にはこの2つのフレームワークが使いやすいと思います.フレームワークは開発が容易で、効率が向上するだけで、能力を向上させるには、フレームワークをひたすら使用することはできません.自分で実現原理を理解する必要があります.もちろん、データベースの知識も基礎であり、分からないわけではありません.しかし、レンガ家として、急いでレンガを運ぶのが重要で、後で興味がある時間があって、また理解します!
一、greenDao使用マニュアル
GreenDAOのgithubアドレス:https://github.com/greenrobot/greenDAO
1、まずgradle導入を行うには、ASに配置する必要がある
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}
次にプロジェクトrootのbuild.gradle加入
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
最後にappのbuild.gradleの参加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
greendao {
//
schemaVersion 1
// DAO,DaoMaster DaoSession 。
daoPackage 'com.greendao.gen'
// 。 build (build/generated/source/greendao)
targetGenDir 'src/main/java'
}
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
// This is only needed if you want to use encrypted databases
//
compile 'net.zetetic:android-database-sqlcipher:3.5.6'
}
構成が完了すると、AS->build->Make Projectの後、フレームワークはtargetGenDirのパスの下で使用したファイルを自動的に生成します.
2、ユーザーを配置して、開発作業を行い、新しいエンティティクラスを作成することができる.
@Entity
public class Message {
@Id
private Long id;
private String msg;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
新しいエンティティークラス、フレームワークは自動的にMessageDaoクラスを生成します
では、次はこのMessageDaoクラスをどのように使用すればいいのでしょうか.
グローバルクラスでDaoSessionエンティティを定義し、このDaoSessionオブジェクトを使用して各エンティティDaoのインスタンスを取得し、コードを参照してください.
public class App extends Application {
/** A flag to show how easily you can switch from standard SQLite to the encrypted SQLCipher. */
public static final boolean ENCRYPTED = true;
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "notes-db-encrypted" : "notes-db");
Database db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
次に使用する場所でDaoインスタンスを入手します
MessageDao mDao = ((App) getApplication()).getDaoSession().getMessageDao();
追加
mDao.insert(Message)
検索
List msgList = mDao.loadAll();
Message msg= mDao.queryBuilder().where(UserDao.Properties.id.eq(888)).unique();
削除
: id 6 ,
List msgList = (List) mDao.queryBuilder().where(MessageDao.Properties.Id.le(6)).build().list();
for (Message msg: msgList) {
mDao.delete(msg);
}
mDao.deleteByKey(id);
mDao.deleteAll();
変更
mDao.update(Message)
データベースのアップグレード
schemaVersion 2
make project
3、greenDaoの中のいくつかの注釈を紹介し、実体注釈を開発するのに便利である.
@Entity(
// ,
//
//
schema = "curschema",
// , ,
active = true,
//
//
nameInDb = "table_message",
// Define indexes spanning multiple columns here.
indexes = {
@Index(value = "name DESC", unique = true)
},
// DAO ( true)
// , false
// GreenDAO , false
createInDb = false
)
基本プロパティ注記
@Id : Long , @Id(autoincrement = true)
@Property: , :@Property (nameInDb="name")
@NotNull:
@Transient :
索引注記
@Index: @Index , name , unique
@Unique:
リレーショナル注記
@ToOne: ( )
@ToMany:
さて、greenDaoについてはここまでご紹介しますが、このライブラリはandroidシステムに最適化されています.メモリのオーバーヘッドが小さく、APIも使いやすいので、自分で研究してみましょう.
一、LitePal使用マニュアル
LitePalのgithubアドレス:https://github.com/LitePalFramework/LitePal
1、gradle導入、最新バージョン、githubで自分で見る
dependencies {
compile 'org.litepal.android:core:1.5.1'
}
2、assetsフォルダでlitepalを新規作成して構成する.xmlファイル
3.LitePalApplicationを構成し、LitePalApplicationを継承できる
public class MyApplication extends LitePalApplication{
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
...
}
構成が完了すると、開発作業が開始されます.
1、エンティティクラスを作成し、データベースのテーブルに対応し、DataSupportを継承しなければならない
public class Album extends DataSupport {
@Column(unique = true, defaultValue = "unknown")
private String name;
private float price;
private byte[] cover;
private List songs = new ArrayList();
// generated getters and setters.
...
}
public class Song extends DataSupport {
@Column(nullable = false)
private String name;
private int duration;
@Column(ignore = true)
private String uselessField;
private Album album;
// generated getters and setters.
...
}
エンティティクラスはlitepalで必要です.xmlでの構成
2、データベース操作
追加
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();
検索
id
Song song = DataSupport.find(Song.class, id);
List allSongs = DataSupport.findAll(Song.class);
List songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);
削除
id
DataSupport.delete(Song.class, id);
DataSupport.deleteAll(Song.class, "duration > ?" , "350");
変更
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
id
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");
データベース非同期アクション
findAllAsyncはデータベースを非同期で検索し、結果はonFinishで返されます.
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
@Override
public void onFinish(List t) {
List allSongs = (List) t;
}
});
非同期ストレージデータ
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.saveAsync().listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
}
});
litePalは郭霖郭神が書いたオープンソースのフレームワークで、皆さんはソースコードを見て勉強することに興味があります.
まとめ
この2つのフレームワークのほかに、ormLite、Realmなどのフレームワークもありますが、個人的にはこの2つのフレームワークが使いやすいと思います.フレームワークは開発が容易で、効率が向上するだけで、能力を向上させるには、フレームワークをひたすら使用することはできません.自分で実現原理を理解する必要があります.もちろん、データベースの知識も基礎であり、分からないわけではありません.しかし、レンガ家として、急いでレンガを運ぶのが重要で、後で興味がある時間があって、また理解します!