JavaLite / ActiveJDBC:从 Getters 派生数据库列?

JavaLite / ActiveJDBC: Derive database columns from Getters?

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

但是,当涉及到 class 的属性时,似乎必须手动完成艰苦的工作(或者我已经监督了重要的部分)。

示例: 假设有一个 class 人的名字和姓氏:

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();

然而,似乎有必要将属性手动分配给class:

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

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

我需要经常访问 POJO 的某些字段,并且我想使用标准的 getter 来这样做。 但是,访问模型的 get(属性) 方法非常昂贵(不确定 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;
}

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

抱歉,您的带有属性的代码示例与框架功能和文档不相关。此外,POJO 是 Plain Old Java Object, which is not necessarily the same as a Java Bean, but you are conflating the two. For more information on ActiveJDBC attributes, refer to Getters and Setters

此外,您可以将 ActiveJDBC 模型转换为 "bean",但您应该将它们更像是地图:

public class Person  extends Model{

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

    public void setFirstName(String f) {
       set("first_name", f)
    }
}

这是一个老问题,但对于 activejdbc 对象,人们似乎仍然需要这些 setters/getters。 所以我决定创建一个简单的注释处理器来创建它们而不是我。 作为奖励,您将获得 equals/hashcode、生成器和一些其他功能,这些功能也可以让您的生活更轻松。 有兴趣的可以在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