写点什么

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

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

关注

评论

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

以理性不断的崇敬 - 对DDD之后复杂业务软件系统设计的思考

冯文辉

领域驱动设计 DDD 架构设计

ReactNative | 项目复盘,涉及环境、RN版本升级、安全等方案

梁龙先森

大前端 混合应用开发 React Native

京东智联云与CDA携手 共同打造电商领域数字化人才认证标准

京东科技开发者

大数据 数据分析 数据分析师

《构建高性能WEB站点》.pdf

田维常

架构

新增原创标签相关改动

sean77

测试 个人 aa bb

【架构师训练营 1 期】第十二周作业

诺乐

架构师训练营第四周总结

Geek_xq

社区团购大战升级:零售行业再次面临挑战

石头IT视角

【架构师训练营 1 期】第十二周学习总结

诺乐

区块链发展前景广阔,要紧跟时代步伐

13828808769

区块链发展 时代发展

生产环境全链路压测建设历程之九 淘宝网全链路压测的原理

数列科技杨德华

FORSAGE智能合约矩阵系统软件APP开发

系统开发

公安一体化警务系统搭建,微警务APP开发

t13823115967

App 智慧公安

Java虚拟机科普系列—元空间Metaspace的内存结构

Java老k

Java JVM Java虚拟机 metaspace

数据类型· 第1篇《元组和列表的性能分析、命名元组》

清菡软件测试

测试开发

求求你,别再用wait和notify了!

王磊

Java

我国一项物联网安全测试技术成为国际标准;Windows 10将支持安卓应用

京东科技开发者

喜大普奔,FL Studio终于出官方中文版了!

懒得勤快

编曲 编曲宿主 mid flstudio 汉化

新增原创标签相关改动

sean77

aa bb cc

如何搭积木式的快速开发H5页面?

徐小夕

Java 大前端 React 数据可视化

一鼓作气学会“一致性哈希”,就靠这 18 张图了

四猿外

分布式 算法 一致性哈希 一致性Hash算法 哈希算法

数据上链,区块链技术平台搭建

t13823115967

数据上链 区块链应用

时序数据库DolphinDB和TimescaleDB 性能对比测试报告

DolphinDB

大数据 分布式系统 时序数据库 DolphinDB 数据库开发

Sentinel 是如何做限流的

vivo互联网技术

高可用 限流 底层

Mybatis是如何解析配置文件的?

田维常

mybatis

Week_12 作业

golangboy

极客大学架构师训练营

《逻辑和计算机设计基础》第五版(英文原版)PDF免费下载

计算机与AI

计算机基础 计算机组成原理

浅谈产品与项目之间的爱恨情仇

随(曾铭新)

领域驱动设计(DDD)实践之路(四):领域驱动在微服务设计中的应用

vivo互联网技术

架构 领域驱动设计 DDD 领域驱动设计DDD

从面试角度分析ArrayList源码

Java旅途

Java List 面试 ArrayList

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