Realm For Android入门教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvzhongdi/article/details/78343100

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支持的方法:

  1. Builder.name : 指定数据库的名称。如不指定默认名为default。
  2. Builder.schemaVersion : 指定数据库的版本号。
  3. Builder.encryptionKey : 指定数据库的密钥。
  4. Builder.migration : 指定迁移操作的迁移类。
  5. Builder.deleteRealmIfMigrationNeeded : 声明版本冲突时自动删除原数据库。
  6. Builder.inMemory : 声明数据库只在内存中持久化。
  7. 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简单的入门了解就简单介绍在这里吧,还有一些异步处理本期没有写出来,等我更新哦~

项目下载

更多文章

如果你觉得还凑合,还能看的话,那么麻烦你动动你的小手分享出去哦

猜你喜欢

转载自blog.csdn.net/lvzhongdi/article/details/78343100