Realm,为移动设备而生。替代 SQLite 和 Core Data。

非常庆幸,官方帮助文档有中文: https://realm.io/cn/docs/java/latest/

尽管眼下最新的版本号0.88.3,连1.0的版本号都没有公布…可是全然不影响她的强大;

API文档: https://realm.io/docs/java/latest/api/

因为官方的帮助文档,有中文的…大家看起来非常easy懂,我这里仅仅依据个人使用经验,写写体验.


1:Realm的引用

Project级别的build.gradle文件:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0-beta3'
classpath 'me.tatarka:gradle-retrolambda:3.3.0-beta4' //lambda表达式配置步骤1
classpath "io.realm:realm-gradle-plugin:0.88.3"//注意此行
}
} allprojects {
repositories {
jcenter()
}
}

Module级别的build.gradle

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //lambda表达式配置步骤2
apply plugin: 'realm-android' //注意此行 android {
...
//lambda表达式配置步骤3,结束.
compileOptions {
encoding "UTF-8"
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
} dependencies {
...
}

(彩蛋:上述中,包括了lambda表达式的配置步骤…你懂得)

2:增删改查的操作

//封装的操作类
public class RRealm {
/**
* 必须调用的方法
*/
public static void init(Context context, String name, boolean clean) {
RealmConfiguration configuration = new RealmConfiguration.Builder(context).name(name).build();
if (clean) {
Realm.deleteRealm(configuration);
}
Realm.setDefaultConfiguration(configuration);
} public static Realm realm() {
return Realm.getDefaultInstance();
} /**
* 通常能够直接此方法
*/
public static void operate(OnOperate operate) {
if (operate != null) {
Realm realm = realm();
realm.beginTransaction();
operate.on(realm);
realm.commitTransaction();
realm.close();
}
} public interface OnOperate {
void on(Realm realm);
} }
private void add() {
RRealm.operate(realm -> {
for (int i = 0; i < Num; i++) {
TestRealmObject realmObject = realm.createObject(TestRealmObject.class);
realmObject.setAge(i);
realmObject.setName("name" + i);
realmObject.setTest("test" + i);
realmObject.setTime(System.currentTimeMillis());
}
});
} private void delete() {
RRealm.operate(realm -> {
RealmResults<TestRealmObject> all = realm.where(TestRealmObject.class).findAll();
all.clear();
});
} private void update() {
RRealm.operate(realm -> {
RealmResults<TestRealmObject> all = realm.where(TestRealmObject.class).findAll();
for (int i = 0; i < all.size(); i++) {
TestRealmObject object = all.get(i);
object.setName(object.getName() + " new");
object.setTest(object.getTest() + " new");
}
});
} private void query() {
RRealm.operate(realm -> {
RealmQuery<TestRealmObject> where = realm.where(TestRealmObject.class);
RealmResults<TestRealmObject> all = where.findAll();
for (TestRealmObject object : all) {
e(object.toString());
}
});
}

3:性能评估

//測试类
public class TestRealmObject extends RealmObject {
public String name;
public int age;
public long time;
public String test;
}
//插入1000条数据: 149 毫秒 148 158 118
//查询1000条数据: 146 毫秒 183 178 192
//删除1000条数据: 39 毫秒 44 37 38
//更新1000条数据: 212 毫秒 195 185 216
//数据仅供參考

再次提醒:官方有中文文档,大家能够具体阅读,会比較好;


至此: 文章就结束了,如有疑问: QQ群:274306954 欢迎您的增加.

Android--&gt;Realm(数据库ORM)使用体验,lambda表达式的更多相关文章

  1. 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

    转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...

  2. java8新特性:内存和lambda表达式

    1.内存变化 取消了永久区和方法区,取而代之的是MetaSpace元空间,即直接使用物理内存,即电脑内存8G则直接使用8g内存,而不是分配内存.因为内存改变,所以调整性能对应的调整参数也随之改变. 2 ...

  3. Java之Lambda表达式

    函数式编程思想概述 面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做. 面向对象的思想: 做一件事情,找一个能解决这个事情的对 ...

  4. 一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

  5. Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...

  6. 17.继承 and18.接口和多态 内部类 匿名内部类,Lambda表达式

    1. 继承 1.1 继承的实现(掌握) 继承的概念 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 实现继承的格式 继承通过extends实现 ...

  7. 作为有经验的程序员如果不懂Lambda表达式就说不过去了吧,建议收藏!!!

      最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Lambda表达式 Lambda表达式   Lambda 表达式,也可称为闭包,它是推动 Java 8 ...

  8. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库

    一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...

  9. 【我的Android进阶之旅】Realm数据库学习资料汇总(持续更新)

    介绍 realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android. 2014年7月发布.由YCombinator孵化的创业团队历时几年打造,是第 ...

随机推荐

  1. HDU 4658 Integer Partition (2013多校6 1004题)

    Integer Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. HDU 3537 Daizhenyang's Coin(博弈,翻硬币)

    Daizhenyang's Coin Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. appium+python自动化47-首次打开app权限弹窗问题

    前言 用真机运行appium代码,首次打开app有的手机会出现权限弹窗问题,一般这种弹窗都是在引导页前面或者引导页后面出现.权限弹窗上面的按钮都是固定的, 只需要定位到"始终允许" ...

  4. POI创建Excel使用的常见的属性

    public static void main(String[] args) { //创建新的Excel 工作簿 HSSFWorkbook workbook =new HSSFWorkbook(); ...

  5. [转]ssis cannot retrieve the column code page info from the ole db provider

    本文转自:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/dc1a61f2-1ab8-4ed3-b85c-db6481800b50/er ...

  6. VMware Workstation 重启服务脚本 解决连不上ssh问题

    解决虚拟机,每次启动连不上ssh问题,需要关闭虚拟机,再执行脚本.执行完后,再启动虚拟机就可以连上ssh啦! 脚本名称:vmware_server_restart.bat (请以管理员身份运行,否则可 ...

  7. c#中的数组、ArrayList、List区别

    首先说明C#中的Array类:Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义.Array 类提供了各种用于数组的属性和方法.关于Array类的一些属性及方法详见博文:C ...

  8. 如何在 CentOS 7 上安装 Percona Server

    在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品.InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比 ...

  9. [转] 一篇好文 ---steve jobs (stay hungry, stay foolish)

    斯蒂夫•保罗•乔布斯(Steve Paul Jobs,1955年2月24日出生-)是蘋果電腦的現任首席執行長(首席执行官)兼創辦人之一.同時也是Pixar動畫公司的董事長及首席執行長.这是他2005在 ...

  10. [React + Functional Programming ADT] Create Redux Middleware to Dispatch Multiple Actions

    We only have a few dispatching functions that need to be known by our React Application. Each one ac ...