#1.概要
RealmはSQLiteに代わる軽量、高速データベースでアプリ開発にも利用できます。
そのRealmが7.0.0になりKotlinの正式ドキュメントも公開されました!
せっかくなのでAndroidアプリでの簡単な使い方をまとめます。
7.0.0はbeta版で、安定板は6.0.2になります。お好みでどうぞ!
■URL
【公式】Kotlinドキュメント
https://realm.io/docs/kotlin/latest/
【公式】Javaドキュメント
https://realm.io/docs/java/latest/
自作サンプル(INSERT,SELECT,DELETEしているだけ)
https://github.com/KIRIN3git/RealmTest
#2.事前準備
build.gradleは7.0.0と6.0.2で設定が違います。
buildscript {
repositories {
jcenter()
google()
maven {
url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
}
}
dependencies {
classpath "io.realm:realm-gradle-plugin:7.0.0-beta-SNAPSHOT"
}
}
allprojects {
repositories {
jcenter()
google()
maven {
url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
}
}
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:6.0.2"
}
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'realm-android'
(注意)kotlinプラグインの後にrealm-androidでないとダメ
#3. 初期化と設定
初期化と設定を行います。
初期化の場所はどこでもOKですが、最初に呼び出せば良いのでApplicationクラスがオススメだそうです。
設定はDBを分けたり、拡張したり、永続化せずインメモリにしたり、リードオンリーにしたりするのに利用するそうです。
設定しなくても動きます。
・参考
RealmConfiguration
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
// 初期化
Realm.init(this)
// 設定
val config = RealmConfiguration.Builder()
.name("myrealm.realm")
.encryptionKey(getMyKey())
.schemaVersion(42)
.modules(MySchemaModule())
.migration(MyMigration())
.readOnly()
.inMemory()
.build()
Realm.setDefaultConfiguration(config)
}
}
#4. モデルクラスの作り方
データをinsertしたりselectするためのデータの型を作成
- 手順
- RealmObjectを継承(必須)
- openに設定(必須)
- 必要に応じてアノテーションを設定
- @PrimaryKey プライマリーキー
- @Index インデックス
- @Ignore 保存したくない項目
- @Required 必須項目
プライマリーキーを設定するとcopyToRealmOrUpdateまたはinsertOrUpdateを使用できます。
open class Person(
@PrimaryKey var id: Long = 0,
var name: String = "",
var age: Int = 0
) : RealmObject()
#5. 登録方法(INSERT)
- 手順
- インスタンスを作成
- トランザクションでラップ
- insert
- インスタンスを閉じる
インスタンスはアクティビティ内などで使いまわしても良いです。
そしてインスタンスは必ず閉じましょう!
トランザクションの方法は色々あります。
非同期で使いたい場合はexecuteTransactionAsync
// インスタンス作成
var realm = Realm.getDefaultInstance()
val personData = Person(1,”Taro”,15)
realm.beginTransaction()
realm.insert(personData)
realm.commitTransaction()
// インスタンスを閉じる
realm.close()
#6. 取得方法(SELECT)
-
手順
- インスタンスを作成
- データの取得
- 絞り込み
- メモリ外にコピー
- インスタンスを閉じる
-
主な取得関数
- findAll:クエリ条件を満たすすべてのオブジェクトを検索します
- findAllAsync:バックグラウンドスレッドで非同期に動作します
- findFirst(またはfindFirstAsync):クエリ条件を満たす最初のオブジェクトを見つける
その他関数はこちら(Javaだけど・・・)
https://realm.io/docs/java/3.5.0/api/io/realm/RealmQuery.html
利用方法はこちらを参照
https://realm.io/docs/kotlin/latest/#queries
RxJavaも利用できる!(試してはいない・・・)
https://realm.io/docs/kotlin/latest/#rxjava
(注意) realmオブジェクトはRealmインスタンスをクローズすると消えてしまう。kotlinオブジェクトとして使いたい場合はcopyFromRealmを使用!
// インスタンス作成
var realm = Realm.getDefaultInstance()
// 全取得
val users = realm.where<Person>().findAll()
// 絞り込み
users.equalTo("name", "John”)
// メモリ外にコピー
val user = realm.copyFromRealm(users[0])
// インスタンスを閉じる
realm.close()
#7. 削除方法(DELETE)
- 手順
- インスタンスを作成
- トランザクションでラップ
- delete
- インスタンスを閉じる
// インスタンス作成
var realm = Realm.getDefaultInstance()
realm.beginTransaction()
// 削除
persons.deleteAllFromRealm()
realm.commitTransaction()
// インスタンスを閉じる
realm.close()