2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

PingCode 权限系统设计与实现

PingCode研发中心

权限系统

《博弈论》— 人生何处不博弈

蔡农曰

读书笔记 博弈论

leetcode 560. Subarray Sum Equals K 和为 K 的子数组(中等)

okokabcd

LeetCode 算法与数据结构

【算法实践】| 手把手带你实现快速排序算法

迷彩

快速排序 算法实践 8月月更

【Gopher 学个函数】边学边练,简单为 Go 上个分

梦想橡皮擦

Python 爬虫 8月月更

基于STM32L431设计的云端绿化管理系统(ESP8266+腾讯物联网云平台)

DS小龙哥

8月月更

最新版MySQL8 绝对有用的lag函数实现同比、环比、均差计算

知识浅谈

MySQL 8月月更

【Java】:二维数组的定义、初始化、长度以及循环遍历等...

翼同学

Java 学习 编程语言 分享 8月月更

C++多态之析构和纯虚析构分析与示例(三)

CtrlX

c++ 后端 面向对象思想 8月月更

[JS真好玩] 遇到表格,手动翻页太麻烦?我教你写脚本,一页展示所有数据

HullQin

CSS JavaScript html 前端 8月月更

机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!

HarmonyOS SDK

SpringBoot 整合 Junit

springboot junit5 8月月更

Excelize 发布 2.6.1 版本更新,支持工作簿加密保护

xuri

开源 数据分析 Go 语言 Excelize Excel工具

一对一语音直播系统源码——如何解决音视频直播技术难点

开源直播系统源码

软件开发 直播系统源码 语音直播系统源码 语音直播源码 一对一语音直播

程序员最容易读错的单词,听到status我炸了

艾小仙

Java 前端

灵活多样认证授权,零开发投入保障IoT安全

EMQ映云科技

安全 物联网 认证授权 emqx 8月月更

阿里云林小平:如何实现应用的持续发布?

阿里云弹性计算

持续发布 应用 自动化运维

动态尺寸模型优化实践之Shape Constraint IR Part II

阿里云大数据AI技术

深度学习 编译器 优化

为什么说:被观察者是 push 数据,迭代者是 pull 数据?

掘金安东尼

前端 函数式编程 8月月更

电商秒杀系统设计(架构实战营 毕业设计项目)

Gor

架构实战营 毕业总结

Gor

头脑风暴:最大子序和

HelloWorld杰少

数据结构 算法 LeetCode 8月月更

企业分账如何帮助用户解决成本优化和预算分配的问题

阿里巴巴中间件

阿里云 Serverless 云原生 SAE

数据治理(六):编译Atlas安装包

Lansonli

数据治理 8月月更

软件测试中的树莓酱定律

BY林子

软件测试 敏捷测试 质量内建

Curve Testing Camp Time|万元大奖等你来拿!

张慧

分布式存储 curve

什么是公共云、私有云、混合云、社区云,四者分别有啥区别?

wljslmz

云计算 8月月更

RocketMQ高可用设计之消息重试机制

急需上岸的小谢

8月月更

Latex安装教程(附美赛论文latex模板)

乌龟哥哥

8月月更

golang实战之flag包

程序员欣宸

golang 8月月更

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