写点什么

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

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

关注

评论

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

安全规范建设指北

I

安全架构 策略 安全规范

跟着卷卷龙一起学Camera--噪声与去噪02

卷卷龙

ISP camera 11月月更

算法题学习---链表相加(二)

桑榆

算法题 11月月更

深入nodejs的event-loop

coder2028

node.js

深入剖析nodejs中间件

coder2028

node.js

前端leetcde算法面试套路之双指针

js2030code

JavaScript LeetCode

复杂组合逻辑电路

芯动大师

Verilog 11月月更 74LS138 译码器

Web中间件常见漏洞总结

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

MUI实战之页面初始化与创建子页面对于新页面的实战心得

恒山其若陋兮

前端 mui 11月月更

pytorch实现空洞卷积+残差网络实验(torch实现

Studying_swz

深度学习 11月月更

用javascript分类刷leetcode3.动态规划(图文视频讲解)

Geek_07a724

JavaScript LeetCode

什么是无线通信协议?无线通信协议有哪些典型的协议?

wljslmz

wifi 无线通信 蓝牙 11月月更

架构--模块5

李某人

架构训练营 #架构训练营

融云全球社交泛娱乐洞察,「视频社交」为什么好赚钱,难出圈?

融云 RongCloud

视频社交

安全左移移了么

I

安全架构 安全左移

现代化安全产品

I

安全产品设计 安全架构

移动应用的手动测试策略

FunTester

深入理解Node.js的进程与子进程

coder2028

node.js

JavaScript刷LeetCode拿offer-位运算

Geek_07a724

JavaScript LeetCode

一文读懂Js中的this指向

hellocoder2029

JavaScript

跟着卷卷龙一起学Camera--噪声与去噪04

卷卷龙

ISP camera 11月月更

“好评返现” 被定为违法行为,互联网数据打假时代何时到来

石头IT视角

设计模式之美--接口和抽象类区别

GalaxyCreater

设计模式

云原生网络趋势 | K8s托管整个基础设施

叶秋学长

云原生 11月月更 网络趋势 云原生系列

微博评论高性能高可用计算架构

π

Java Web(十二)Vue&Element

浅辄

Vue javaWeb 11月月更

架构实战训练营模块 5 作业

Geek_b35d92

微博评论 微博

跟着卷卷龙一起学Camera--噪声与去噪03

卷卷龙

ISP camera 11月月更

一文彻底搞懂前端缓存机制

hellocoder2029

JavaScript

图解KafkaConsumer SyncGroupRequest请求流程

石臻臻的杂货铺

kafka Kafka实战 11月月更

一比一手写迷你版vue,彻底搞懂vue运行机制

hellocoder2029

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