25
Realm JAVA 2.2.0 Build better apps, faster. Author: Đới Thanh Thịnh Savvycom-software

Present realm

  • Upload
    thinhit

  • View
    87

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Present realm

Realm JAVA 2.2.0

Build better apps, faster.

Author: Đới Thanh ThịnhSavvycom-software

Page 2: Present realm

SQLite problems

• Queries too slow• Complex

relationships • Nest SELECT, JOIN • Migration

Page 3: Present realm

SQLite problems No-SQL SQLite

A

B

D

G

C

FE

Realm.getA().getC().getF(); SELECT user.name, user.email

FROM user

INNER JOIN shop ON user.id = shop.userid

INNER JOIN city ON user.cityid = city.id WHERE

user.name = 'the flash'

Page 4: Present realm

1. What Realm Is 2. Compare and contrast with SQLite3. Implement Realm4. Example

Overview

Page 5: Present realm

Realm is a mobile database and a replacement for SQLite

Core is written in C++ Cross platform mobile database

What Realm Is

Page 6: Present realm

AdvantagesFaster than SQLiteSupport in-memory databaseCustom migratingThe Realm file can be stored encrypted on disk

by standard AES-256 encryption

Missing Features:Auto-incrementing idsCompoud primary keys

Features

Page 7: Present realm

PrerequisitesWe do not support Java outside of Android at the moment.Android Studio >= 1.5.1A recent version of the Android SDK.JDK version >=7.We support all Android versions since API Level 9 (Android 2.3 Gingerbread & above).

Page 8: Present realm

BenchmarksFaster than SQLite (up to 10x speed up over raw SQLite )

Page 9: Present realm

Benchmarks

Page 10: Present realm

Benchmarks

Page 11: Present realm

Step 1: Add the following class path dependency to the project level build.gradle file.buildscript { repositories { jcenter() } dependencies { classpath "io.realm:realm-gradle-plugin:2.2.0" }}

Step 2: Apply the realm-android plugin to the top of application level build.gradle file. apply plugin: 'realm-android'

Installation

Page 12: Present realm

Models: Realm model classes are created by extending the RealmObject base class.

public class User extends RealmObject {

private String name; private int age;

@Ignore private int sessionId;

// Standard getters & setters generated by your IDE… 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 getSessionId() { return sessionId; } public void setSessionId(int sessionId) { this.sessionId = sessionId; }}

Implement Realm

Custom methods:public boolean hasLongName() { return name.length() > 7; }

Page 13: Present realm

Field types:Supports the following field types: boolean, byte, short, int, long, float, double, String, Date and

byte[].The boxed types Boolean, Byte, Short, Integer,

Long, Float and Double

@Required: used to tell Realm to enforce checks to disallow null values

@Ignore: a field should not be persisted to disk @PrimaryKey : a primary key field @Index will add a search index to the field

Implement Realm: Types fields

Page 14: Present realm

Relationships

N – 1public class Contact extends RealmObject { private Email email; // Other fields…}

N - Npublic class Contact extends RealmObject { public RealmList<Email> emails; // Other fields…}

You can use this to model both one-to-many, and many-to-many relationships.

Page 15: Present realm

Conditions of Queries

between(), greaterThan(), lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()

equalTo() & notEqualTo() contains(), beginsWith() & endsWith() isNull() & isNotNull() isEmpty() & isNotEmpty()

Page 16: Present realm

RealmResults<User> r = realm.where(User.class) .greaterThan("age", 10) //implicit AND .beginGroup() .equalTo("name", "Peter") .or() .contains("name", "Jo") .endGroup() .findAll();

Conditions of Queries

RealmResults<User> result = realm.where(User.class).findAll();result = result.sort("age"); // Sort ascendingresult = result.sort("age", Sort.DESCENDING);

Page 17: Present realm

InsertRealm myRealm = Realm.getInstance(this);Person person2 = new Person();person2.setId("U2");person2.setName("John");

myRealm.beginTransaction();// copy the object to realm. Any further changes must happen on realmPersonPerson realmPerson = myRealm.copyToRealm(person2);myRealm.commitTransaction();

Dog dog1 = myRealm.createObject(Dog.class); // Set its fields dog1.setId("A"); dog1.setName("Fido"); dog1.setColor("Brown"); myRealm.commitTransaction();

Page 18: Present realm

realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { Dog myDog = realm.createObject(Dog.class); myDog.setName("Fido"); myDog.setAge(1); }});Dog myDog = realm.where(Dog.class).equalTo("age", 1).findFirst();

realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { Dog myPuppy = realm.where(Dog.class).equalTo("age", 1).findFirst(); myPuppy.setAge(2); }});

myDog.getAge(); // => 2

Auto-Updating

Auto Update Realtime

Page 19: Present realm

Example

public class Person extends RealmObject { private String id; private String name; private RealmList<Dog> dogs; // getters and setters}

public class Dog extends RealmObject { private String id; private String name; private String color; // getters and setters}

Page 20: Present realm

Example// persons => [U1,U2]RealmResults<Person> persons = realm.where(Person.class) .equalTo("dogs.color", "Brown") .findAll();

// r1 => [U1,U2]RealmResults<Person> r1 = realm.where(Person.class) .equalTo("dogs.name", "Fluffy") .equalTo("dogs.color", "Brown") .findAll();

// r2 => [U2]RealmResults<Person> r2 = realm.where(Person.class) .equalTo("dogs.name", "Fluffy") .findAll() .where() .equalTo("dogs.color", "Brown") .findAll(); .where() .equalTo("dogs.color", "Yellow") .findAll();

Page 21: Present realm

Insert/UpdateAsynchronous Transactions:realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { User user = bgRealm.createObject(User.class); user.setName("John"); user.setEmail("[email protected]"); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { // Transaction was a success. } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { // Transaction failed and was automatically canceled. } });

Avoid blocking the UI thread

Page 22: Present realm

Delete// obtain the results of a queryfinal RealmResults<Dog> results = realm.where(Dog.class).findAll();

// All changes to data must happen in a transactionrealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { // remove single match results.deleteFirstFromRealm(); results.deleteLastFromRealm();

// remove a single object Dog dog = results.get(5); dog.deleteFromRealm();

// Delete all matches results.deleteAllFromRealm(); }});

Page 23: Present realm

JSON• It is possible to add RealmObjects represented as JSON directly to Realm . they are represented as a String, a JSONObject or an InputStream

• Single object is added through Realm.createObjectFromJson() • lists of objects are added using Realm.createAllFromJson().

// A RealmObject that represents a citypublic class City extends RealmObject { private String city; private int id; // getters and setters left out ...}

// Insert from a stringrealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { realm.createObjectFromJson(City.class, "{ city: \"Copenhagen\", id: 1 }"); }});

Page 24: Present realm

Demo

Page 25: Present realm

ResourcesOfficial Site for Realmhttps://realm.io/

Realm Full API for Javahttp://realm.io/docs/java/latest/api/

Realm Browser:https://github.com/realm/realm-cocoa/tree/master/tools/RealmBrowser

Github:https://github.com/thinhdt/DemoRealm