Android-->Realm(数据库ORM)使用体验,lambda表达式
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-->Realm(数据库ORM)使用体验,lambda表达式的更多相关文章
- 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结
转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...
- java8新特性:内存和lambda表达式
1.内存变化 取消了永久区和方法区,取而代之的是MetaSpace元空间,即直接使用物理内存,即电脑内存8G则直接使用8g内存,而不是分配内存.因为内存改变,所以调整性能对应的调整参数也随之改变. 2 ...
- Java之Lambda表达式
函数式编程思想概述 面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做. 面向对象的思想: 做一件事情,找一个能解决这个事情的对 ...
- 一文搞懂Java8 Lambda表达式(附带视频教程)
Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...
- Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案
内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...
- 17.继承 and18.接口和多态 内部类 匿名内部类,Lambda表达式
1. 继承 1.1 继承的实现(掌握) 继承的概念 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 实现继承的格式 继承通过extends实现 ...
- 作为有经验的程序员如果不懂Lambda表达式就说不过去了吧,建议收藏!!!
最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Lambda表达式 Lambda表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 ...
- Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库
一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...
- 【我的Android进阶之旅】Realm数据库学习资料汇总(持续更新)
介绍 realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android. 2014年7月发布.由YCombinator孵化的创业团队历时几年打造,是第 ...
随机推荐
- [典型漏洞分享]一个典型的软件漏洞--memcpy导致的缓冲区溢出
YS VTM模块存在缓冲区溢出漏洞,可导致VTM进程异常退出[高] 问题描述: YS VTM模块开放对外监听端口(8554和8664),并从外部接收网络数据,中间模块调用到memcpy函数对网络数据进 ...
- 【系统自启动】使用windows自带工具管理开机启动项
1.windows+R,键入:msconfig 2.进入启动选项卡 3.将不用自启动的选项 取消勾选即可 点击应用,重启电脑即可
- sso 自动化运维平台
单点登录SSO(Single Sign-On)是身份管理中的一部分.本文中作者开发了一个自动化运维平台中的统一认证接口,单点登录平台通过提供统一的认证平台,实现单点登录.因此,应用系统并不需要开发用户 ...
- 搭建开源入侵检测系统Snort并实现与防火墙联动
Snort作为一款优秀的开源主机入侵检测系统,在windows和Linux平台上均可安装运行.BT5作为曾经的一款经典的渗透神器,基于 Ubuntu,里面已经预装很多的应用,比如Mysql.Apach ...
- 安装64位office时提示已安装32位的office
运行 regedit,进入到HKEY_CLASSES_ROOT\Installer\Products下,删除0000510开头的项,没有00005我把00002....的删了也可以
- Mac触控板常用的手势操作
Mac触控板常用的手势操作 学习了:http://topbook.cc/archives/151 一个手指直接点击,类似Windows中鼠标左键功能,同时在苹果Safari等浏览器中,这个手势还 ...
- r与java整合(转)
http://jliblog.com/archives/10 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方 ...
- 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...
- Python描写叙述符(descriptor)解密
Python中包括了很多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...
- Flutter网络请求与JSON解析
本文介绍如何在Flutter中创建HTTP网络请求和对请求的json string进行类型解析. 网络请求 官方使用的是用dart io中的HttpClient发起的请求,但HttpClient本身功 ...