美文网首页
Realm 数据库实体

Realm 数据库实体

作者: 我就是杨过 | 来源:发表于2018-07-04 14:22 被阅读0次

    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 关于实体有很多地方没有看 有时间再看

    相关文章

      网友评论

          本文标题:Realm 数据库实体

          本文链接:https://www.haomeiwen.com/subject/mgyeuftx.html