Realm For Android入門教程
Realm For Android入門教程
各位看客老爺們,很久沒更新文章了;最近專案中的資料庫那裡寫的我的確有點噁心了,所以開始看看各種資料庫框架,我查了下網上對各種資料庫框架的對比分析哈;但是我一眼就看上了你(realm) 可以跨平臺,可以輕鬆的使用json資料,這簡直對我來說是神器啊,我都懶得處理資料了,暫時先寫個demo,入門吧,來考驗下這個,我看網上說了有很多坑,我先踩踩坑~
1、Realm簡介
資料庫Realm,是用來替代sqlite的一種解決方案,它有一套自己的資料庫儲存引擎,比sqlite更輕量級,擁有更快的速度,並且具有很多現代資料庫的特性,比如支援JSON,流式api,資料變更通知,自動資料同步,簡單身份驗證,訪問控制,事件處理,最重要的是跨平臺,目前已有Java,Objective C,Swift,React-Native,Xamarin這五種實現。
2、環境配置
在Progect build中新增:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:2.0.2"
}
}
在app build中頭新增
apply plugin: 'realm-android'
3、在Application中初始化Realm
在Application中初始化,別忘記在AndroidManifest.xml檔案中的application宣告
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder()
.name("myRealm") //資料庫名字
.schemaVersion(0) //資料庫版本號
.build(); //建立
Realm.setDefaultConfiguration(config);
}
}
RealmConfiguration支援的方法:
- Builder.name : 指定資料庫的名稱。如不指定預設名為default。
- Builder.schemaVersion : 指定資料庫的版本號。
- Builder.encryptionKey : 指定資料庫的金鑰。
- Builder.migration : 指定遷移操作的遷移類。
- Builder.deleteRealmIfMigrationNeeded : 宣告版本衝突時自動刪除原資料庫。
- Builder.inMemory : 宣告資料庫只在記憶體中持久化。
- build : 完成配置構建。
4、建立實體
1.現在開始建立第一個demo的例項吧
程式碼奉上
public class Dog extends RealmObject {
private String name;
private int age;
@PrimaryKey
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
並沒有很多東西,頂多是多了個標籤(@PrimaryKey)
這就是個普通的javabean啊;相關的其他標籤我寫在下面啦
1、支援的資料型別:
boolean, byte, short, int, long, float, double, String, Date and byte[]
在Realm中byte, short, int, long最終都被對映成long型別
2、註解說明
@PrimaryKey
①欄位必須是String、 integer、byte、short、 int、long 以及它們的封裝類Byte, Short, Integer, and Long
②使用了該註解之後可以使用copyToRealmOrUpdate()方法,通過主鍵查詢它的物件,如果查詢到了,則更新它,否則新建一個物件來代替。
③使用了該註解將預設設定(@index)註解
④使用了該註解之後,建立和更新資料將會慢一點,查詢資料會快一點。
@Required
資料不能為null
@Ignore
忽略,即該欄位不被儲存到本地
@Index
為這個欄位新增一個搜尋引擎,這將使插入資料變慢、資料增大,但是查詢會變快。建議在需要優化讀取效能的情況下使用。
5、增刪改查
建立完畢後,我就建立了一個工具類;將資料庫的操作都寫入裡面;
先為各位看客老爺風險上程式碼:
public class DatabasesManager {
/**
* 增加資料
*/
public static void Add() {
for (int i = 2; i < 10; i++) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
Dog dog = realm.createObject(Dog.class, i);
dog.setAge(23 + i);
dog.setName("U" + i);
realm.commitTransaction();
}
}
/**
* 刪除
*/
public static void Delete() {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
Dog dog = realm.where(Dog.class).equalTo("id", 1).findFirst();
dog.deleteFromRealm();
realm.commitTransaction();
}
/**
* 修改
*/
public static void Update() {
Realm realm = Realm.getDefaultInstance();
Dog dog = realm.where(Dog.class).equalTo("id", 0).findFirst();
realm.beginTransaction();
dog.setName("網二");
realm.commitTransaction();
}
/**
* 查詢
*
* @return
*/
public static List<Dog> Quarry() {
Realm realm = Realm.getDefaultInstance();
return realm.where(Dog.class).findAll();
}
}
如上的程式碼並不是很難的操作;
看到這裡是不是感覺很簡單呢?
詳細講解下
a. 增
新建一個物件,並進行儲存:使用的是Transaction的方式
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
Dog dog = realm.createObject(Dog.class, i);
dog.setAge(23 + i);
dog.setName("U" + i);
realm.commitTransaction();
b. 刪
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
Dog dog = realm.where(Dog.class).equalTo("id", 1).findFirst();
dog.deleteFromRealm();
realm.commitTransaction();
我覺得最主要說的應該是equalTo(String fieldName, Integer value) 這裡面的引數;
fieldName:這個是資料庫的欄位名稱——也就是javabean的名字哦
value:你的條件值啊;這個語句就類似於:
delete from table where table.a = (select b where c.filename = value);
c.改
Realm realm = Realm.getDefaultInstance();
Dog dog = realm.where(Dog.class).equalTo("id", 0).findFirst();
realm.beginTransaction();
dog.setName("網二");
realm.commitTransaction();
這個沒什麼好說的,跟上面跟上面刪除的操作類似;
d.查詢
Realm realm = Realm.getDefaultInstance();
realm.where(Dog.class).findAll();
哇咔咔,這個是不是太簡單了,相對比較我之前寫的查詢語句,簡直簡便了多了,2行程式碼,之前封裝完了也不止2行(ps:可能是作者我比較low)
擴充套件一點點:增加個調價查詢;哈哈
想必聰明的你看到這裡都知道了,一定是這樣的;
Realm realm = Realm.getDefaultInstance();
realm.where(Dog.class).equalTo("id", 0).findFirst();
那麼肯定又有人要問了,如果我需要其他條件怎麼辦啊?小主早就為你準備好了,往下看
常見的條件如下(詳細資料請查官方文件):
between(), greaterThan(), lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()
equalTo() & notEqualTo()
contains(), beginsWith() & endsWith()
isNull() & isNotNull()
isEmpty() & isNotEmpty()
好啦,Realm簡單的入門瞭解就簡單介紹在這裡吧,還有一些非同步處理本期沒有寫出來,等我更新哦~
如果你覺得還湊合,還能看的話,那麼麻煩你動動你的小手分享出去哦