写点什么

Polyforms——减少 DAO 代码重复

  • 2008-10-29
  • 本文字数:924 字

    阅读完需:约 3 分钟

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 分别提供了对大规模更新和查询计数的支持。

EntityRepository

父接口已经支持保存单实体、删除和通过标识符获取的功能。

所有这些连接都是通过

Spring framework

完成的,并依赖 Spring 的切面来提供 API 的动态实现。

Polyforms 支持的其他功能包括:

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

更多信息请访问

Polyforms wiki

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

2008-10-29 07:431025
用户头像

发布了 501 篇内容, 共 259.4 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

2023牛客网最新版Java面试题及答案整理

架构师之道

Java 面试

vhdns软件介绍与功能特性

新消费日报

低代码平台技术分享官丨系统集成系列之领域建模

inBuilder低代码平台

关于直播间APP源码的开发,你了解多少?

山东布谷网络科技

1v1交友app开发

16款好用的白板笔记软件推荐,干货整理!

彭宏豪95

效率工具 软件推荐 科技 在线白板 Mac笔记软件

如何实现高效的动态鉴权

KaiwuDB

KaiwuDB 动态鉴权

Coral Finance 将为 Zepoch 节点空投,Nautilus生态空投季开启

鳄鱼视界

指标让 AI 更懂业务|Kyligence Copilot 是如何做到的?

Kyligence

Kyligence Copilot 数智助理

C++ 中的std::array实现编译器排序

芯动大师

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

PingCAP

数据库 开源 TiDB pingCAP

低代码开发为什么能长盛不衰?

力软低代码开发平台

微信安全基于 Flink 实时特征开发平台实践

Apache Flink

大数据 flink 实时计算

Coral Finance 将为 Zepoch 节点空投,Nautilus生态空投季开启

威廉META

前端视角的可观测性(一)

林十二XII

大一统真的来了:多模态共享参数的 Meta-Transformer

Zilliz

meta Towhee 多模态大模型

Coral Finance 将为 Zepoch 节点空投,Nautilus生态空投季开启

股市老人

PingCAP 陈煜琦:深耕中国市场,构建客户成功生态

PingCAP

MySQL 数据库 开源 TiDB pingCAP

java面试-数据库

程序员小张

自定义字体服务 - 基于Node的Web字体解决方案

疯狂紫萧

前端 nodejs 字体

Java 命令行参数解析方式探索(二):Apache Commons CLI

冰心的小屋

Java 命令行 console Apache Commons CLI

更新合集 | 七月功能上新记

CODING DevOps

AntDB数据库与东方通TongWeb完成兼容互认,共筑数字化底座核心能力

亚信AntDB数据库

数据库 AntDB 企业号 7 月 PK 榜

Docker学习路线12:开发者体验

小万哥

Java c++ Go Docker 运维

从可逆计算看DSL的设计要点

canonical

低代码 dsl 低代码平台 领域特定语言 模型驱动

软件测试 | 创建触发器

测吧(北京)科技有限公司

测试

Linux内核编译很简单,六步编译一个自己的内核

树上有只程序猿

Linux 编译

如何确定产品要做什么终端?

Bonaparte

产品 产品设计 产品终端

Polyforms——减少DAO代码重复_Java_R.J. Lorimer_InfoQ精选文章