Realm简介
Realm 是一个移动数据库,可运行于手机、平板和可穿戴设备之上。可以让你的应用更快速,带来难以想象的体验。其目标是为了代替 CoreData 和 SQLite 数据库。
Realm非常易用,不是在SQLite基础上的ORM,它有自己的数据查询引擎。是完全重新开发的数据库,速度非常快,并且支持跨平台,数据加密,数据迁移,支持json,流式api等 。
Realm使用步骤:
1、第一步:在项目的 build.gradle 文件中添加如下 class path 依赖。
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath "io.realm:realm-gradle-plugin:3.1.1"
}
2、第二步:在 app 的 build.gradle 文件中应用 realm-android
插件。
apply plugin: 'realm-android'
3、第三步:在Application初始化
public class MyApplication extends Application {
@Override
public void onCreate() {
Realm.init(this);
RealmConfiguration configuration = new RealmConfiguration.Builder().name("test.realm").build();
Realm.setDefaultConfiguration(configuration);
super.onCreate();
}
}
4、创建Do类
User类:
public class User extends RealmObject {
@PrimaryKey
private String id;
private int age;
@Required
private String name;
private RealmList<Dog> dogRealmList;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public RealmList<Dog> getDogRealmList() {
return dogRealmList;
}
public void setDogRealmList(RealmList<Dog> dogRealmList) {
this.dogRealmList = dogRealmList;
}
}
Dog类:
public class Dog extends RealmObject{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5、初始化Realm
private Realm realm;
realm = Realm.getDefaultInstance();
6、增数据
//增数据
public void insertRealm(View view) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//创建对象,由于有主键需要加上参数,因为realm不能自增,所有使用uuid代替
User user = realm.createObject(User.class, UUID.randomUUID().toString());
user.setAge(18);
user.setName("谁谁谁");
RealmList<Dog> dogs = new RealmList<>();
for(int i=0;i<3;i++){
Dog dog = realm.createObject(Dog.class);
dog.setAge(5);
dog.setName("小白"+i);
dogs.add(dog);
}
user.setDogRealmList(dogs);
//由于有主键使用copyToRealmOrUpdate
realm.copyToRealmOrUpdate(user);
}
});
}
7、删数据
//删数据
public void deleteRealm(View view) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//先查询再删除
RealmResults<User> result= realm.where(User.class).findAll();
result.get(4).deleteFromRealm();//删除指定位置(第4条记录)的记录
result.deleteFromRealm(4);//删除指定位置(第4条记录)的记录
result.deleteFirstFromRealm(); //删除user表的第一条数据
result.deleteLastFromRealm();//删除user表的最后一条数据
result.deleteAllFromRealm();//删除user表的全部数据
}
});
}
8、改数据
//改数据
public void updateRealm(View view) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//先查询后更改
RealmResults<Dog> result = realm.where(Dog.class).equalTo("name","hh").findAll();
for(Dog dog : result){
dog.setAge(20);
}
}
});
}
9、查数据
//查数据
public void queryRealm(View view) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
RealmResults<User> users = realm.where(User.class).findAllSorted("id", Sort.DESCENDING);//按照id倒序排序
long size = users.size();//返回数据的条数
double average = users.average("age");//返回查询结果的中age的平均值
long sum = users.sum("age").longValue();//返回查询结果中age的总数
long min = users.min("age").longValue();//返回查询结果中age的最小值
long max = users.max("age").longValue();//返回查询结果中age的最大值
System.out.println(size);
System.out.println(average);
System.out.println(sum);
System.out.println(min);
System.out.println(max);
}
});
}