Polyforms 项目的目标是剔除用于绑定数据访问对象和底层持久化 API 的重复代码。该框架采用的办法是自动实现开发人员定义的 Repository 接口上的服务方法。接口中定义的方法默认通过命名规则连接到数据库操作上。例如,项目 wiki 上讨论了如何为 User 实体对象实现一个存储。首先,存储的 API 必须定义成:
public interface UserRepository extends EntityRepository<User, String> { @Finder List
findByCreator(User creator);}
@Finder 注释标记了 Polyforms 的方法。接下来,不要实现 UserRepostiory,而是通过另外的注释在 User 实体中提供一个匹配 Hibernate 的查询。
复制代码
<span>@NamedQueries</span><span>({</span><span><br></br></span><span> </span><span>@NamedQuery</span><span>(</span><span>name </span><span>=</span><span> </span><span>"User.findByCreator"</span><span>,</span><span> query </span><span>=</span><span> </span><span>"select u from User u where u.creator = :creator"</span><span>),</span><span><br></br></span><span>})</span><span><br></br></span><span>public</span><span> </span><span>class</span><span> </span><span>User</span><span> </span><span>{</span><span><br></br> </span><span>...</span><span><br></br></span><span>}</span>
根据文档,用于查找查询语句的命名规则是基于方法名和实体名:
命名查询的映射规则是 [name of Named Query] = [name of Entity].[name of method]。你可以通过 @Finder 指定命名查询的名字,如 @Finder(“findUserByName”),然后命名查询的名字会是“User.findUserByName”。
除了 @Finder 注释,还有 @Updater 和 @Counter 分别提供了对大规模更新和查询计数的支持。
父接口已经支持保存单实体、删除和通过标识符获取的功能。
所有这些连接都是通过
完成的,并依赖 Spring 的切面来提供 API 的动态实现。
Polyforms 支持的其他功能包括:
- 跟踪信息(创建者、创建日期、修改者、修改日期)的自动管理
- 透明的分页支持
- 通过注释定义事务边界
- 域事件模型,分离持久化事件和应用功能。
更多信息请访问
。
评论