簡體   English   中英

JavaLite / ActiveJDBC:從 Getter 派生數據庫列?

[英]JavaLite / ActiveJDBC: Derive database columns from Getters?

ActiveJDBC 是一個真正的“瘦”數據庫映射器,允許查詢數據庫並將結果映射到 POJO。 我使用的是 2.1-SNAPSHOT 版本。

但是,當涉及到類的屬性時,似乎必須手動完成繁重的工作(或者我已經監督了一個必不可少的部分)。

示例:讓我們假設有一個具有 firstName 和 lastName 的類 Person:

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

所以......我在這里錯過了什么嗎?......感謝任何幫助。

抱歉,您的帶有屬性的代碼示例與框架功能和文檔不相關。 另外,POJO是一個普通的Java對象它不一定與 Java Bean 相同 ,但是您正在將兩者混為一談。 有關ActiveJDBC屬性的更多信息,請參見Getter和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 對象的 setter/getter。 所以我決定創建一個簡單的注釋處理器來代替我創建它們。 作為獎勵,您將收到 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM