写点什么

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

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

关注

评论

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

Akamai 调研揭示:安全性成数字原生企业选择云服务首要考量,87%企业优先重视安全再议成本及可扩展性

财见

自控经验 自控的分层 工厂车间设备级控制

万里无云万里天

自动化 工厂运维

mcgs笔记 查看 辅助提示

万里无云万里天

自动化 HMI mcgs

mcgs笔记 用户 查看用户与用户组

万里无云万里天

自动化 HMI mcgs

虚拟币交易平台开发指南:打造安全高效的虚拟货币交易系统

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 代币开发

基于LangChain手工测试用例转App自动化测试生成工具

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

测试

数据中台的兴衰与数据飞轮的兴起

乌龟哥哥

数据中台 #数据飞轮

自控经验 工厂在地理上的分区

万里无云万里天

自动化 工厂运维

mcgs笔记 安全属性 使能控制与安全控制

万里无云万里天

自动化 HMI mcgs

mcgs笔记 报警 报警统一配置的导出与导入

万里无云万里天

自动化 HMI mcgs

mcgs笔记 报警 各变量的报警属性功能

万里无云万里天

自动化 HMI mcgs

mcgs笔记 权限 按钮的操作权限设置

万里无云万里天

自动化 HMI mcgs

语音识别与语音控制

芯动大师

语音控制

天池Fashion AI 比赛失败经历分享

阿里云天池

区块链DApp开发:选择正确公链的重要性

区块链软件开发推广运营

交易所开发 dapp开发 NFT开发 公链开发 代币开发

如何免费调用GPT API进行自然语言处理

幂简集成

API ChatGPT

科技创新推动教育普惠,华为云WeLink助力"青椒计划"举办种子教师研学活动

轶天下事

开放原子开源生态大会OpenHarmony生态主题演讲报名开启

OpenHarmony开发者

OpenHarmony

低代码开发:助力制造业数字化高质量发展

不在线第一只蜗牛

低代码

mcgs笔记 报警 报警滚动条

万里无云万里天

自动化 HMI mcgs

mcgs笔记 报警 报警浏览构件

万里无云万里天

自动化 HMI mcgs

mcgs笔记 报警 报警统一配置

万里无云万里天

自动化 HMI mcgs

mcgs笔记 动画按钮 根据值分段显示内容

万里无云万里天

自动化 HMI mcgs

mcgs笔记 用户 登录登出查看用户信息

万里无云万里天

自动化 HMI mcgs

自控经验 传统流程工业的特点

万里无云万里天

自动化 工厂运维

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