写点什么

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

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

关注

评论

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

JavaScript基础语法

Java

阿里内部流传的Mybatis笔记终于流传出来了,赶紧收藏

简爱W

深入浅出Vert.x架构

dinstone

oeasy 教您玩转linux010101查看内核uname

o

学会反射后,我被录取了(干货)

苹果看辽宁体育

Java 后端 反射

我在项目中不可或缺么?

escray

学习 面试

牛逼操作,ThreadLocal还能当缓存用

简爱W

Java

都2020了,你的APP还不能运行小程序?

FinClip

小程序生态 私有小程序技术

Java 约束注解

HeGuang

一款高仿 Eyepetizer | 开眼短视频的 MVVM 开源项目

vipyinzhiwei

android kotlin 短视频 eyepetizer 开眼

如何提升系统可用性

码猿外

可用性 持续交付 工程能力 团队文化

国产数据库的经济民族

郭华

数据库 商业

我,一个当代普通大学生的自述

有梦的咸鱼

个人成长 大学生日常 个人感悟 讨论写作

面试28k职位,老乡面试官从HashCode到HashMap给我讲了一下午!「回家赶忙整理出1.6万字的面试材料」

小傅哥

数据结构 面试 hashmap 红黑树

架构师训练营高可用作业

qihuajun

我能讲明白哪些技术?

escray

学习 面试 沟通

LeetCode题解:25. K 个一组翻转链表,迭代,JavaScript,详细注释

Lee Chen

大前端 LeetCode

透过兴趣爱好看本质

escray

学习 面试

oeasy教您玩转linux010102查看发行版

o

【数据结构与算法】力扣实战之移动零、盛最多的水、爬楼梯

三钻

算法 大前端 LeetCode 数据结构与算法

第11周作业

小胖子

架构师训练营高可用学习总结

qihuajun

刘华:弹性便是一切

刘华Kenneth

架构 DevOps 敏捷 弹性

我的缺点就是做事太认真

escray

学习 面试

再谈引入YAPI接口平台的好处

Man

DevOps YAPI API接口管理

Flink中的数据传输-5

小知识点

scala 大数据 flink

MySQL系列(二):MySQL是怎么处理并发操作的?

z小赵

MySQL 数据库 事务

MySQL备份与恢复场景示例

Simon

MySQL

这么理解业务架构就对了!

周金根

BIZBOK 业务架构

乘风破浪,Spring Boot入门

Simon郎

Spring Boot

Golang领域模型-六边形架构

奔奔奔跑

微服务 领域驱动设计 架构设计 Go 语言

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