【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

关注

评论

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

Golang 编程“珠玑”

MatrixOrigin

golang 分布式数据库 编程语言 MatrixOrigin MatrixOne

前端手写面试题总结

helloworld1024fd

JavaScript

万亿级对象存储的元数据系统架构设计和实践

百度开发者中心

对象存储 文件存储 百度沧海

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

目前兰州市等保测评机构有几家?有新增的吗?

行云管家

等保 等级保护 等保测评 兰州

谈谈Linux内核的噪声

统信软件

Linux 内核

建设 TiDB 自动化平台:转转 DBA 团队实践

PingCAP

数据库 自动化 TiDB

自己手写一个redux

helloworld1024fd

JavaScript

Unittest接口测试生成报告和日志方法

日志 单元测试 自动化测试 unittest 测试报告

堡垒机行业标杆产品是哪家呢?有哪些功能?

行云管家

网络安全 信息安全 等保 堡垒机

unittest中使用ddt后生成的测试报告名称如何修改?(如test_api_0修改成test_api_0_titile)

单元测试 自动化测试 unittest 参数化 ddt

SQL工具性能实测:居然比Navicat还快,数百万行数据导出仅51秒

雨果

sql 数据库管理工具 Web SQL sql studio

美团前端必会vue面试题合集

bb_xiaxia1998

Vue

解读Teradata结束中国直营背后的原因!国产数据库能填补空缺吗?

雨果

数据库管理工具 国产数据库 teradata SQL工具

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

react hook 源码完全解读

flyzz177

React

构建云边端一体的分布式云架构,软硬结合驱动边缘计算创新场景

百度开发者中心

云原生 边缘计算 #百度智能云#

React源码解读之任务调度

flyzz177

React

React源码解读之更新的创建

flyzz177

React

LR性能测试常见问题及处理方法(一)

性能测试 问题排查 LoadRunner

12大团队任务分配管理软件盘点

PingCode

项目软件管理 项目软件

腾讯前端一面经典手写面试题合集

helloworld1024fd

JavaScript

React源码分析4-深度理解diff算法

goClient1992

React

React源码分析2-深入理解fiber

goClient1992

React

vivo x TiDB丨解决云服务海量数据挑战

PingCAP

TiDB

【FAQ】集成分析服务的常见问题及解决方案

HMS Core

HMS Core

可视化分析能力MAX,瓴羊Quick BI带来全新数据分析体验

对不起该用户已成仙‖

LR性能测试常见问题及处理方法(二)

性能测试 问题排查 LoadRunner

Led透明显示屏的发展超乎你想象

Dylan

LED 显示器 LED显示屏

写过vue自定义指令吗,原理是什么?.m

bb_xiaxia1998

Vue

百度前端必会react面试题总结

beifeng1996

React

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