Realm数据实体类
- 类和方法的访问域是 public, protected and private;
- 字段类型包括 boolean, byte, short, int, long, float, double, String, Date and byte[];映射是long型。 另外还有 RealmList<? extends RealmObject>;
- 代码如下
public class User extends RealmObject {
private String name;
private int age;
@Ignore
private int sessionId;
// Standard getters & setters generated by your IDE…
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public int getSessionId() { return sessionId; }
public void setSessionId(int sessionId) { this.sessionId = sessionId; }
}
数据实体中的标签
- @Required 不为空
- @PrimaryKey 指定主键 可以使用string或者任何整型的数据 主键可以为空 也可以没有主键
- 注意 使用 copyToRealmOrUpdate 和 insertOrUpdate 放啊的时候必须有主键 否则会有异常抛出
- 非常注意 当实体类有主键的时候 不能通过Realm.createObject() 来创建所以要创建 unmanaged object,然后设置值,之后通过copyToRealm or insert 来导入realm数据库。如下所示。
final MyObject obj = new MyObject();
obj.setId(42);
obj.setName("Fish");
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// This will create a new object in Realm or throw an exception if the
// object already exists (same primary key)
// realm.copyToRealm(obj);
// This will update an existing object with the same primary key
// or create a new object if an object with no primary key = 42
realm.copyToRealmOrUpdate(obj);
}
});
- @Index 给某个字段建立索引 (适合建立在更快读取的地方) 类型 String, byte, short, int, long, boolean and Date fields.
- @Ignore 字段不存入 Realm数据库中
- static和transient 修身的字段 自动ignore
Realm提供的一个特殊的整型数值 MutableRealmInteger
- 一般当 读取数据库的时候 会有一个计数器,读取的时候 加1 ;但是当异步读取的时候回出现问题;两个异步读取,同时加1,但是最终结果应该是2;
- 必须被声明 为 final 因为数据库 写入的时候 它会自己改变 TODO 没有太明白
- 使用 counter.increment() or counter.decrement(). 来增加或者减少 使用counter.set() 来重置。(重置会使其他的increment 或者decrement 失效,所以如果counter丢失可以接受的话就可以)
Party party = realm.where(Party.class).findFirst();
realm.beginTransaction();
party.guests.get(); // 0
party.guests.increment(1); // 1
party.guests.decrement(1); // 0
party.guests.increment(5); // 5
party.guests.decrement(1); // 4
realm.commitTransaction();
重写实体类中的属性名字 代码中没有 可能是其他方式代用了 TODO
TODO 关于实体有很多地方没有看 有时间再看
网友评论