写点什么

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

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

关注

评论

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

栀子花,我们应该像你一样静静绽放

小天同学

个人感想 感悟 日常思考

ARTS week 2

锈蠢刀

你的团队想做出什么成果?

姜戈

团队管理

提升输入效率第一步——切换双拼

dongh11

效率工具 提升效率 生产力 分享 有趣

源码分析 | Mybatis接口没有实现类为什么可以执行增删改查

小傅哥

Java 源码分析 小傅哥 mybatis 编程思维

你的团队是干什么的?

姜戈

团队管理 团队职能

Vol.1 Java初探,新手必看!

pyfn2030

编程 新手指南

使用<input>标签实现六个格子验证码输入框

码上生长

Java vue.js 大前端

python实现·十大排序算法之计数排序(Counting Sort)

南风以南

Python 排序算法 计数排序

redis过期策略和内存淘汰机制

wjchenge

Android原生人脸识别Camera2+FaceDetector 快速实现人脸跟踪

sar

联邦学习与推荐系统

博文视点Broadview

人工智能 大数据 学习 推荐系统

假如孔乙己是程序员

顿晓

学习 程序员 孔乙己

健身一周年:持续锻炼带来无法想象的改变

小鲸数据

学习 职业 专注 健身

宕机原因千千万,被雷劈了最无奈

田晓旭

突破困局

Neco.W

感悟 工作 创业心态

多线程与线程安全(实例讲解)

YoungZY

Java 多线程 线程安全

点击劫持:无X-Frame-Options头信息(修复)

唯爱

软件开发生产率改进之我见(二)

清水

软件工程 软件开发 技术管理

好的软件工程原则

pydata

实现元素等高: Flexbox vs. Grid

寇云

CSS css3

Spring Security 两种资源放行策略,千万别用错了!

江南一点雨

Java spring springboot springsecurity

你为什么“啃不动”你手中的技术书?

图灵社区

Java Python 算法 HTTP R语言

管理规划篇

姜戈

团队管理 团队组织

终于,我也到了和Eclipse说再见的时候,难说再见

程序员小跃

Java eclipse IDEA

数据与广告系列三:合约广告与与衍生的第三方广告数据监控

黄崇远@数据虫巢

数据挖掘 互联网 广告 移动互联网

你真的会用Mac中的Finder吗

Winann

macos 效率 App Mac

100天从 Python 小白到大神最良心的学习资源!

JackTian

Python GitHub 学习 Python-100-Days Python-Core-50-Courses

一致性算法 Raft 简述

架构精进之路

raft 一致性算法

揭秘神经拟态计算:缘何成为AI界新宠?

最新动态

码农远程办公指北

大伟

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