Polyforms項目的目標是剔除用於綁定數據訪問對象和底層持久化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支持的其他功能包括:
跟蹤信息(創建者、創建日期、修改者、修改日期)的自動管理
透明的分頁支持
通過注釋定義事務邊界
域事件模型,分離持久化事件和應用功能。