写点什么

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:431305
用户头像

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

关注

评论

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

线上JAVA应用平稳运行一段时间后出现JVM崩溃问题 | 京东云技术团队

京东科技开发者

Java 定时任务 JVM 企业号11月PK榜

云工作流 CloudFlow 重磅发布,流程式开发让云上应用构建更简单

Serverless Devs

阿里云 Serverless 函数计算FC

专业终端SSH工具 SecureCRT注册码正式版

胖墩儿不胖y

Mac软件 终端SSH仿真工具 终端仿真器

Mac日程管理软件Fantastical 中文破解版 让日程管理更加便捷!

Rose

日程管理App Fantastical Mac中文版 Fantastical下载 Mac日历软件

架构实战营 - 模块四作业

王朝阳

架构实战营

ps2021一键换天空教程

Rose

ps2021破解版 一键换天空 ps2021下载 ps2021天空替换 Photoshop Mac破解版

极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队

京东科技开发者

性能优化 前端 前端性能 企业号11月PK榜 Qwik.js

如何使用 Loadgen 来简化 HTTP API 请求的集成测试

极限实验室

集成测试 loadgen 极限科技

倒计时丨3天后,我们直播间见!

RestCloud

零代码

Paste for Mac剪切板管理工具

展初云

Mac Mac软件 剪切板

商用解决方案助力产业链实现自循环 OpenHarmony技术大会硬件(南向)生态分论坛圆满落幕

科技热闻

UUID意想不到的block

FunTester

微前端无界机制浅析 | 京东物流技术团队

京东科技开发者

前端 源码剖析 微前端 无界 企业号11月PK榜

12月9-10日·上海线下·CSM认证周末班【提前报名特惠】“敏捷教练必修课”CST导师亲授

ShineScrum

扒一扒互联网Markdown的那些事儿

Java研究者

互联网 markdown 发展趋势

图像处理软件Photoshop 2024 (ps) for Mac v25.1

展初云

Mac ps Mac软件 Photoshop 2024

什么是大模型?一文读懂大模型的基本概念

九章云极DataCanvas

endnote x9怎么和word关联?Word中用EndNote X9教程

Rose

Word 2021 许可证 endnote x9 文献写作管理软件

助力应用创新提升开发效率聚焦OpenHarmony技术大会开发者工具分论坛

科技热闻

Eudic欧路词典 for Mac英语学习工具

展初云

Mac 欧路词典 英语学习软件

助力工业数字化!TDengine 与恩菲 MIM+ 工业互联网平台实现兼容性互认

TDengine

tdengine 时序数据库

安全好用的远程协同运维软件重点推荐-行云管家

行云管家

远程运维 运维软件 远程系统 远程协同 协同运维软件

解决Lightroom无法使用修改照片的问题

Rose

Lightroom Classic 2022 Mac破解软件 Lightroom无法使用 LR2024 Mac中文

用友全球司库十问(六)|新一代票据能力如何实现赋能企业票据管理?

用友BIP

全球司库 票据管理

大家都在用的数据安全运维管理系统是哪家?有什么功能?

行云管家

数字化 数据安全 数据运维

Golang面试题从浅入深高频必刷「2023版」

王中阳Go

Go golang 面试题 大厂面经 最新面试题

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