0

ActiveJDBC 是一个真正的“瘦”数据库映射器,允许查询数据库并将结果映射到 POJO。我使用的是 2.1-SNAPSHOT 版本。

然而,当涉及到一个类的属性时,看起来必须手动完成艰苦的工作(或者我已经监督了一个重要的部分)。

示例:假设有一个类 Person 具有 firstName 和 lastName:

public class Person {
    private String firstName;
    private String lastName;

    public String getFirstName() {
       return this.firstName;
    }

    public void setFirstName(String f) {
       this.firstName = f;
    }

    // same for lastName
}

现在检索数据很容易:

List<Person> persons = Person.findAll();

但是,似乎有必要手动将属性分配给一个类:

for(Person p : persons) {
    System.out.println(p.getLastName()) // ===> null
}

所以问题是:是否可以(如果可以,如何)使用通常的 getter 和 setter 访问 POJO 的属性?或者是否可以注释字段以将它们相应地映射到数据库列(例如 first_name、last_name)?

我需要经常访问 POJO 的某些字段,并且我想使用标准的 getter 来这样做。但是,访问模型的 get(property) 方法非常昂贵(不确定 Model.get() 是否意味着 SELECT 语句?)。

现在我得到了一些丑陋的东西

String getFirstName() {
  if (this.firstName != null) 
     return this.firstName;

  Object o = get("first_name");
   if (o == null) 
      this.firstName = "";
   else 
      this.firstName = o.toString;

   return  this.firstName;
}

那么......我在这里错过了什么吗?......感谢任何帮助。

4

2 回答 2

1

抱歉,您的带有属性的代码示例与框架功能和文档无关。此外, POJO 是一个普通的旧 Java Object它不一定与Java Bean相同,但您将两者混为一谈。有关 ActiveJDBC 属性的更多信息,请参阅Getters 和 Setters

此外,您可以将 ActiveJDBC 模型转换为“bean”,但您应该将它们视为映射:

public class Person  extends Model{

    public String getFirstName() {
       return getString("first_name");
    }

    public void setFirstName(String f) {
       set("first_name", f)
    }
}
于 2018-02-13T14:36:52.263 回答
0

这是一个老问题,但似乎人们仍然需要这些 setter/getter 来处理 activejdbc 对象。所以我决定创建一个简单的注释处理器来代替我创建它们。作为奖励,您将获得 equals/hashcode、builder 和其他一些功能,这些功能也可以让您的生活更轻松。如果你对它感兴趣,你可以在 maven Central 上找到这个注解处理器。

<dependency>
    <groupId>io.github.erioh</groupId>
    <artifactId>activejdbc-wrapper</artifactId>
    <version>1.0.3</version>
</dependency>

文档可以在这里找到https://github.com/erioh/activejdbc-wrapper-project

于 2021-10-25T17:13:08.557 回答