BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Polyforms——减少DAO代码重复

| 作者 R.J. Lorimer 关注 0 他的粉丝 ,译者 崔康 关注 1 他的粉丝 发布于 2008年10月30日. 估计阅读时间: 3 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

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支持的其他功能包括:

 

  • 跟踪信息(创建者、创建日期、修改者、修改日期)的自动管理
  • 透明的分页支持
  • 通过注释定义事务边界
  • 域事件模型,分离持久化事件和应用功能。

 

更多信息请访问

Polyforms wiki



查看英文原文:Polyforms - Reduce DAO Code Duplication

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

罪恶 by sen firefly

罪恶啊,我又看到了滥用的注解。

没有意义 by Alex wang

没有意义,让人更加迷惑

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT