Realm

介绍

什么是ORM?

Android原生操作数据库的方式是这样的:首先定义一个类继承SQLiteOpenHelper,重写onCreate和onUpdate,后续对数据库的增删改查以及创建和销毁都需要操作相对比较底层的sql语句,难以记忆又容易出错,而且操作sql语句代码量多,sql语句的逻辑比较繁琐。

而Java是面向对象的语言,有没有一种方式可以让我们不去关心sql语句的编写,直接面向对象;我们操作对象就间接操作了数据库。那么orm数据库框架就是帮助我们完成这个事,并且能够将javabean和数据库的表映射起来,javabean的字段就是表的字段。这就是为什么叫o(对象)r(关系)m(映射)的原因。

为什么选择Realm?

目前主流的orm类库有:Realm,greenDao,DBFlow,Ormlite,xutil,afinal等;

Realm专为移动开发设计,并与其他主流库完美融合使用,功能强大,性能和效率都处于领先地位,因此我们选择学习它。

1. 添加依赖

首先,在project目录下的root build.gradle文件中添加如下:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath "io.realm:realm-gradle-plugin:3.0.0"

}

}

其次,在module目录下的build.gradle文件中添加如下:

apply plugin: 'realm-android'

2. 定义model

创建model有2种方式:继承RealmObject;实现RealmModel接口

方式一,继承自RealmObject,如下:

public class User extends RealmObject {

public User(String name, int age) {

this.name = name;

this.age = age;

}

//1.当自定义构造函数时,必须有一个无参数构造

public User(){}

public String name;

public int age;

@Ignore //该字段不会被存储到db中

public int height;

//2.it can also have custom method...

public void sayName(){

Log.d("tag", "sayName: "+this.name);

}

}

方式二,实现RealmModel 接口,并添加注解@RealmClass,如下:

@RealmClass

public class User implements RealmModel {

public User(String name, int age) {

this.name = name;

this.age = age;

}

//1.当自定义构造函数时,必须有一个无参数构造

public User(){}

public String name;

public int age;

@Ignore //该字段不会被存储到db中

public int height;

3. 增删改查

增加

增加,删除和修改操作必须在事务(transaction)控制下进行,Realm进行事务操作有2种方式,异步和同步,推荐异步模式。

同步创建数据到Realm数据库,有2种写法:

//同步操作写法一:

realm.beginTransaction();

//会创建对象和user表

User user = realm.createObject(User.class);

//会自动更新表

user.name = "刘德华";

user.age = 55;

//提交事务,操作就被执行

realm.commitTransaction();

//同步操作写法二:

realm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

//会创建对象和user表

User user = realm.createObject(User.class);

//会自动更新表

user.name = "刘德华";

user.age = 55;

}

});

异步创建数据,推荐异步的方式:

realm.executeTransactionAsync(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

User user = realm.createObject(User.class);

//会自动更新表

user.name = "刘德华";

user.age = 55;

}

}, new Realm.Transaction.OnSuccess() {

@Override

public void onSuccess() {

//操作成功

Log.e(TAG, "onSuccess: " );

}

}, new Realm.Transaction.OnError() {

@Override

public void onError(Throwable error) {

//操作失败

Log.e(TAG, "onError: "+error.getMessage());

}

});

查询

RealmQuery query = realm.where(User.class);

RealmResults users = query.findAll();

if(users==null || users.size()==0){

Log.e(TAG, "query: no data!" );

}else{

Log.e(TAG, "query: size: "+users.size());

User user = users.get(0);

Log.e(TAG, "query: "+user.name );

}

删除

realm.executeTransactionAsync(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

RealmQuery query = realm.where(User.class);

RealmResults users = query.findAll();

users.get(0).deleteFromRealm();//删除元素

}

}, new Realm.Transaction.OnSuccess() {

@Override

public void onSuccess() {

Log.e(TAG, "onSuccess: delete success" );

}

});

修改

realm.executeTransactionAsync(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

RealmQuery query = realm.where(User.class);

RealmResults users = query.findAll();

User user = users.get(0);

user.name = "张学友";

user.age = 10;

}

});

4. 过滤器(Filter)

Realm支持多种多样的过滤器,让数据操作更方便!

所有数据类型支持:

equalTo和notEqualTo

Number数据类型,包括Date支持:

between:两者之间

greaterThan:大于某个值

lessThan:小于某个值

greaterThanOrEqualTo:大于或等于

lessThanOrEqualTo:小于或等于

字符串类型支持:

contains:包含

beginsWith:以...开始

endsWith:以...结尾

like:类似于...

android realm 简书,Realm使用(入门篇)相关推荐

  1. android realm 简书,Realm简介

    概述 是一个跨平台移动数据库引擎,支持iOS.OS X(Objective‑C和Swift)以及Android. Realm相较于SQLite: 性能相对其他移动端数据库性能更优. 使用相对于SQLi ...

  2. Android 过反抓包总结入门篇

    Android 过反抓包总结入门篇 做协议分析少不了抓包,但是对于新入门我们来说,这是一大难题,网上各种各样的工具不少.但是如果遇到反抓包,那就芭比Q了.但是一些简单的反抓包机制还是很好过的. 1.要 ...

  3. android realm 简书,android 数据库SQLite realm

    一.SQLite android内置了数据库SQLite,这是一款轻量级的关系型数据库,通常只需要几百K的内存.数据库文件存放在/data/data//databases/目录下. 为了方便管理数据库 ...

  4. android计步器简书,自定义View-仿QQ运动步数进度效果

    自定义View-仿QQ运动步数进度效果 一.写在前面 (1) 图一,仿QQ步数运行效果 (2) 图二,完整的圆效果 完整代码请看这 二.正文开始 (1)首先来个三部曲,自定义属性,布局设置,属性获取 ...

  5. android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  6. android 仿简书评论,Android仿简书搜索框效果的示例代码

    前言 之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是有些要注意的东西的.话不多说,直接上图. Activity ...

  7. android jsoup简书,jsoup爬虫简书首页数据做个小Demo

    昨天LZ去面试,遇到一个大牛,被血虐一番,发现自己基础还是很薄弱,对java一些原理掌握的还是不够稳固,比如java反射注解,知道一点就是说不出来,很尴尬... 生命不止,学习不止啊 之前那个项目 Q ...

  8. Android仿简书、淘宝等APP View弹出效果

    在用简书App的时候觉得这个View的弹出效果特别好,而且非常平滑. 先看看效果: 主要是scale,alpha,translation几个普通动画组合,这里不再分析. 实现效果图: 代码:https ...

  9. android仿简书编辑器,类似zine,简书的app移动编辑器-Light Seven

    原标题:类似zine,简书的app移动编辑器-Light Seven 无论你是否从事文字编辑工作,我相信每个人都会接触到文字编辑.既然接触到文字编辑,顺理成章的就会接触到文字编辑的应用和软件. 在生活 ...

最新文章

  1. 开课吧python课程-明星为开课吧直播带货:人人都要学,人人都可以学的Python
  2. 求正多边形的面积JAVA_第六章第三十六题(几何:正多边形的面积)(Geometry: area of a regular polygon)...
  3. 赠人玫瑰,手有余香-期待协作更新机器学习的公益项目
  4. VTK:演示在多边形数据上使用裁剪用法实战
  5. 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)
  6. linux 查看vnc端口_VNC常用操作及常见问题解决办法汇总
  7. 资源放送丨《Oracle 12C~19C统计信息的最佳实践》PPT视频
  8. cmd执行bat结果不回显_cmd - 如何在bat文件中调用另一个bat文件
  9. java jama_java矩阵包jama的简单操作
  10. 任意文件夹下打开cmd窗口
  11. ARM体系结构的特点
  12. 神策分析 2.1 重磅上线!报警诊断、多主体分析、渠道追踪等赋能企业数字化经营...
  13. 【Zabbix】Zabbix网络自动发现
  14. ssm毕设项目基于远程协作的汽车故障诊断系统t6ipg(java+VUE+Mybatis+Maven+Mysql+sprnig)
  15. 在线QQ客服链接,只添加 qq号
  16. deepin-wine下微信升级到最新版方法
  17. 搜索引擎市场份额2018.3
  18. 关于jd-gui启动报This program requires Java 1.8+的错误
  19. pytorch1.13启用caffe2
  20. 【LeetCode】(55)Jump Game(Medium)

热门文章

  1. 汽车上的电源模块:BAT、ACC、IGN、ST
  2. Zabbix忘记admin密码
  3. 7761万!眉山市公安局“智慧警务”—视频图像感知源和视觉计算边缘节点建设项目...
  4. 2021年秋PTA乙 7-2 数以类聚 (20 分)
  5. Android修行手册 - 官方SearchView使用/属性/监听
  6. java libpcap,tcpreplay安装失败,libpcap / collect
  7. Python基础——第八章:Python文件操作
  8. 自学考试——网络经济与企业管理
  9. 自学Python五 爬虫基础练习之SmartQQ协议
  10. 2022年危险化学品经营单位主要负责人考试模拟100题及模拟考试