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. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  2. ORACLE常用性能监控SQL【一】

    目录(?)[+] 系列 ORACLE常用性能监控SQL[一] ORACLE常用性能监控SQL[二] Oracle-动态性能视图解读 系列 死锁后的解决办法 生成Kill Session语句 查看导致死 ...

  3. python对于0x01的处理

    对于python脚本,可以使用: .replace('\x01', '') 对于vim工具,可以使用: :%s/\%x01/ /g

  4. http://www.tmser.com/post-177.html

    http://www.tmser.com/post-177.html http://maven.group.iteye.com/group/topic/21617

  5. Ftp上传文件

    package net.util.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  6. 【JavaScript】ReactJS基础

    初探React,将我们的View标签化 前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的 ...

  7. 2017.12.25 Mybatis物理分页插件PageHelper的使用(二)

    参考来自: 官方文档的说明:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md 上篇博客 ...

  8. mysql时间字段转换为毫秒格式

    下面是转载的关于MySQL毫秒.微秒精度时间处理的两段篇章,留给自己和供大家参考~~ 一.MySQL 获得毫秒.微秒及对毫秒.微秒的处理 MySQL 较新的版本中(MySQL 6.0.5),也还没有产 ...

  9. linux中mysql主从备份

    在centos中安装mysql详细步骤说明 条件:需要两个虚拟机,一台为主服务器master,一台为从服务器slave 1     在master主服务中,创建用于同步的用户 mysql> gr ...

  10. SOA服务总线设计

    背景 基于总线的设计,借鉴了计算机内部硬件组成的设计思想(通过总线传输数据).在分布式系统中,不同子系统之间需要实现相互通信和远程调用,比较直接的方式就是“点对点”的通信方式,但是这样会暴露出一些很明 ...