Polyforms——減少DAO代碼重複

來源:互聯網
上載者:User

Polyforms項目的目標是剔除用於綁定Data Access Objects和底層持久化API的重複代碼。該架構採用的辦法是自動實現開發人員定義的Repository介面上的服務方法。介面中定義的方法預設通過命名規則串連到資料庫操作上。例如,項目wiki上討論了如何為User實體物件實現一個儲存。首先,儲存的API必須定義成:

public interface UserRepository extends EntityRepository<User, String> {

  @Finder
  List<User> findByCreator(User creator);
}

@Finder注釋標記了Polyforms的方法。接下來,不要實現UserRepostiory,而是通過另外的注釋在User實體中提供一個匹配Hibernate的查詢。

@NamedQueries({
  @NamedQuery(name = "User.findByCreator", query = "select u from User u where u.creator = :creator"),
})
public class User {
 ...
}

根據文檔,用於尋找查詢語句的命名規則是基於方法名和實體名:

命名查詢的映射規則是[name of Named Query] = [name of Entity].[name of method]。你可以通過@Finder指定命名查詢的名字,如@Finder("findUserByName"),然後命名查詢的名字會是“User.findUserByName”。

除了@Finder注釋,還有@Updater和@Counter分別提供了對大規模更新和查詢計數的支援。

EntityRepository

父介面已經支援儲存單實體、刪除和通過標識符擷取的功能。

所有這些串連都是通過

Spring framework

完成的,並依賴Spring的切面來提供API的動態實現。

Polyforms支援的其他功能包括:

跟蹤資訊(建立者、建立日期、修改者、修改日期)的自動管理

透明的分頁支援

通過注釋定義事務邊界

域事件模型,分離持久化事件和應用功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.