2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

深入理解rtmp(二)之C++脚手架搭建

轻口味

android 音视频 直播 RTMP 9月日更

TDSQL分布式数据库的HDFS和LOCAL备份配置

腾讯云数据库

数据库 tdsql

海量数据,极速体验——TDSQL-A技术核心架构02

腾讯云数据库

数据库 tdsql

联想TruScale服务定义IT服务新标准,助力中国企业全面抢滩智能化

科技范儿

代码工具:VSCode

正向成长

vscode

官方披露 TDSQL 十年自主可控之路

腾讯云数据库

数据库 tdsql

WGCLOUD新特性,新增指令下发批量执行能力

王逅逅

DevOps Grafana #zabbix linux面板 linux监测

揭秘超分辨率的正确打开方式

OpenIM

【VueRouter 源码学习】第八篇 - $route、$router 与 router-link 组件的实现

Brave

源码 vue-router 9月日更

NDK-原生 API

Changing Lin

9月日更

亿级流量下平滑扩容:TDSQL水平扩容 VS 垂直扩容

腾讯云数据库

数据库 tdsql

声网发布在线K歌房解决方案,提供一站式接入版权曲库与K歌组件

ToB行业头条

声网

数据库连接池

邱学喆

TDSQL的分布式事务处理技术:高效的分布式事务双一致性

腾讯云数据库

数据库

TDSQL分布式数据库的架构与解耦

腾讯云数据库

数据库 tdsql

观测未来,携手同行!驻云诚邀您参加2021 OSCAR 开源产业大会!文末报名福利!

观测云

开源 可观测

一分钟带你了解Huawei LiteOS组件开发指南

华为云开发者联盟

curl 内核 组件 Huawei LiteOS 组件开发

你知道线程池是如何退出程序的吗?

华为云开发者联盟

线程 高并发 线程池 任务队列

数据脱敏是什么意思?有什么好处?

行云管家

数据库 数据安全 数据脱敏 数据库安全

云随想一:企业为什么要上云?

FLASH

原生云

TDSQL水平扩容背后的设计原理

腾讯云数据库

数据库 tdsql

Golang: 如何使用正则表达式,并实战爬取手机号

Regan Yue

正则表达式 爬虫 Go 语言 9月日更

☕【Java技术指南】「并发编程专题」Fork/Join框架基本使用和原理探究(基础篇)

码界西柚

Java forkjoin forkjoinpool 9月日更

一次带宽拉满引发的百分百超时血案!

Gopher指北

Go 语言

C语言中动态内存是如何分配的?

华为云开发者联盟

数组 内存 动态内存 内存分配 C语音

计算机工业的生态链(二)

姬翔

9月日更

TDSQL(MySQL版)之DB组件升级

腾讯云数据库

数据库 tdsql

海量数据,极速体验——TDSQL-A技术核心架构01

腾讯云数据库

数据库 tdsql

OceanBase 数据库大赛“推荐官招募令”,做推荐官,让优秀选手C位出道!

OceanBase 数据库

数据库 比赛 oceanbase OceanBase 开源 OceanBase 数据库大赛

TDSQL水平扩容实践案例

腾讯云数据库

数据库 tdsql

tcpdump 抓包与 scapy 解析(qbit)

qbit

udp TCP/IP tcpdump

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