AICon 北京站 Keynote 亮点揭秘,想了解 Agent 智能体来就对了! 了解详情
写点什么

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

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

关注

评论

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

Go语言学习查缺补漏ing Day4

Regan Yue

Go 语言 11月日更

架构师书籍推荐:2021年必看的架构师图书

华章IT

架构师

打造数字化软件工厂 —— 一站式 DevOps 平台全景解读

CODING DevOps

DevOps 研发管理 CODING

云账户是什么意思?有什么用?

行云管家

云计算 公有云 私有云 混合云 云资源

一文解析数据库的三生三世

Zilliz

数据库 oracle 数据库设计 Milvus

主客体命名法

少个分号

Flux 源码之reactor 核心原理及概述

漫游指南

reactor Flux

springboot连接Nexus私服

小鲍侃java

11月日更

混沌工程:分布式系统稳定性的“疫苗”

中原银行

微服务 云原生 混沌工程

WeTest.net全球能力开放:锻造高品质产品,构建全球竞争力

WeTest

这一次,飞书改变「飞书」

ToB行业头条

前端如何低门槛开发iOS、Android、小程序多端应用

YonBuilder低代码开发平台

Shopee 末端物流智能提效之路

Shopee技术团队

人工智能 算法 后端 供应链 物流

CODING 项目协同 2.0 —— 让协作有条不紊

CODING DevOps

DevOps 研发管理 CODING 项目协同

TDengine助力顺丰科技大数据监控改造

TDengine

tdengine 时序数据库

百万关注的CSRF攻击是什么意思?

喀拉峻

黑客 网络安全 安全 信息安全

阿里P8手敲出来这份565页凤凰架构分布式手册,惨遭GitHub直接封杀

热爱java的分享家

Java 面试 编程语言 经验分享 凤凰架构

等级保护对象是指什么?是指整个单位吗?

行云管家

云计算 网络安全 等保 等级保护 等保2.0

热爱代码且发量惊人,一名反“内卷”研发工程师的日常

尔达Erda

程序员 开发者 技术人生 成长笔记

React性能优化

CRMEB

ArkUI 3.0让多设备开发更简单|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

渗透实战:内网域渗透

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

修复SecurityException: getDataNetworkTypeForSubscriber问题

Changing Lin

11月日更

关于风险管理,如何将思维从项目升维到项目群?

光环PMO社群

项目管理 项目经验

业务流程建模,你真的做对了吗

明道云

人脸识别实战:使用Python OpenCV 和深度学习进行人脸识别

AI浩

人脸识别

太顶了!华为高工用一份423页的网络协议笔记把计算机网络讲清了

热爱java的分享家

Java 面试 程序人生 网络协议 经验分享

CSS布局(二)之多列布局

Augus

CSS 11月日更

ICCV 2021口罩人物身份鉴别全球挑战赛冠军方案分享

阿里云CloudImagine

阿里云 计算机视觉 视频云 ICCV2021 ICCV

【语言】Java 日期 API 的使用技巧

恒生LIGHT云社区

Java 编程语言

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