维护字段名称的替代方案

4

在Android中使用Sqlite作为数据库时,我们中的许多人会创建一个类DbConstants,将所有表名、列名保存为常量。

在Realm数据库中,我们准备POJO类,它们分别表示为表和字段作为列名。

是否有任何方法可以避免在这里创建另一个常量文件?

用例:

表示用户表的POJO:

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;       
 }
}

当我们按照以下方式查询用户表时:

RealmResults<User> result = realm.where(User.class)
                              .equalTo("name", "John")
                              .or()
                              .equalTo("name", "Peter")
                              .findAll();

我不想在这里使用像“name”这样的文字。有没有其他优雅的解决方案或最佳实践?


1
你的setter/getter表明你不熟悉Lombok:https://projectlombok.org/features/GetterSetter.html - Marcin Orlowski
@MarcinOrlowski 那个POJO直接来自于Realm文档 :) 。虽然我的也没有什么不同。感谢提供有趣的链接! - binaryKarmic
1个回答

4
通常的做法是在您的模型类中拥有一个静态的最终常量,像这样:

通常的做法是在您的模型类中拥有一个静态的最终常量,像这样:

public class User extends RealmObject {
  public static final String NAME = "name";
  public static final String AGE = "age";

  // Fields, constructors, getters, setters,
}

realm.where(Person.class).equalTo(Person.NAME, "John").findAll();

如果您希望自动化地完成此操作,您可以查看:https://github.com/cmelchior/realmfieldnameshelper

我真的想使用这个辅助工具,但它说它只能与 Realm 1.2.0-SNAPSHOT 版本一起使用。 - binaryKarmic
是的,没错。现在它只能与我们的快照版本一起使用。我们可能会在今天发布Realm 1.1.1版本,它也可以与之兼容。 - Christian Melchior
祝好运! - binaryKarmic
1
Realm Java 1.1.1已经发布,该库也应该与之兼容。 - Christian Melchior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接