InfoQ

新闻

Polyforms——减少DAO代码重复

作者 R.J. Lorimer译者 崔康 发布于 2008年10月29日 上午7时43分

社区
Java
主题
数据访问
标签
Hibernate,
Spring框架

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

2 条回复

回复

罪恶 发表人 firefly sen 发表于 2008年11月4日 上午5时54分
没有意义 发表人 wang Alex 发表于 2008年11月12日 下午7时40分
  1. 返回顶部

    罪恶

    2008年11月4日 上午5时54分 发表人 firefly sen

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

  2. 返回顶部

    没有意义

    2008年11月12日 下午7时40分 发表人 wang Alex

    没有意义,让人更加迷惑

深度内容

Flex与JSON及XML的互操作

平台需要互操作性。在这篇文章中,作者仔细研究了Flex和JSON及XML的互操作性。文章也包含了使用E4X库来将XML映射到图表和表格组件的内容,还演示了如何使用as3core库来解码JSON消息。

用Qi4j进行面向组合编程

本文将简要介绍面向组合编程(COP,Composite Oriented Programming)的概念,展示它如何规避OOP存在的一些问题,并重新点燃使用可重用部件组装领域模型(Domain Model)的希望。

系统开发——新学科,新教育

一门新的计算机学科——“系统开发”,强调人性化、匠艺、设计、创意、创新和新事物的涌现,并建议用被称为“bottega”的工作室替代乏善可陈的教室。

图书聚焦:Visual Studio 2008 揭秘

Mike Snell和Lars Powers用他们最近由Sams出版的新书《Visual Studio 2008揭秘》,试图帮助大家提高开发人员的生产力。本文包括一个下载样章——第10章调试。

BPEL为何不是BPM的圣杯?

Pierre Vigneras在本文中讨论了作为标准之一的BPEL所存在的问题。Pierre先给我们大致介绍了一个简单的并行流程,接着讨论了从业者在试图以一个结构化模型为基础表达非结构化流程时遇到的一系列问题。

基于范型的多语言编程

你是否仔细思考过,为什么人们总在讨论“要正确的语言做恰当的事情”?在这篇文章中,Sadek Drobi向你解释了为什么应该在系统内部混合使用多种语言。

采访与书摘《Pro Web 2.0 Application Development with GWT》

Jeff Dwyer就关于他的新书(《Pro Web 2.0 Application Development with GWT》)、GWT1.5以及创建可搜索的Ajax应用谈了一些他的见解。

时刻准备着,迎接IT业的春天

我们需要设身处地地为客户及客户的业务本身着想,与客户同舟共济。更多创新的思路、产品和模式也同样将为IT业带来新的出路。IT业并不需要坐以待毙,在春天到来之后,市场将会更加繁荣!