写点什么

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

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

关注

评论

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

JVM篇:对象的深度剖析,mybatis入门程序

Java 程序员 后端

架构营模块二作业

GTiger

架构实战营

Java面试被MySQL问哭了,面试官一个连环炮提问,我一个都讲不清

Java 程序员 后端

Java高级特性之 IO流,java面试题高级

Java 程序员 后端

JDK的前世今生:细数 Java5 - 15 的那些经典特性

Java 程序员 后端

架构实战营 毕业总结

脉醉

架构 3 期模块二作业:下微信朋友圈的高性能复杂度

渐行渐远

架构实战营

Jedis入门教程,java入门课程百度网盘

Java 程序员 后端

JMM - Java 内存模型,java读写锁源码分析

Java 程序员 后端

JUnit5学习之三:Assertions类,java微服务架构训练营

Java 程序员 后端

JVM内存溢出分析:堆内存溢出+虚拟机,BTAJ大厂最新面试题汇集

Java 程序员 后端

Kafka性能调优实战:同等资源配置性能提升20几倍的秘诀

Java 程序员 后端

Kubernetes 常用命令大全,震撼来袭免费下载

Java 程序员 后端

Java面试题超详细整理《Spring篇》,Tencent后台开发Java岗二面

Java 程序员 后端

Kafka-on-Pulsar 的前世今生,新秀 Pulsar 到底好在哪?

Java 程序员 后端

Kotlin之DSL,java面试写代码

Java 程序员 后端

Java面试屡碰壁,一气之下狂刷高分宝典,一月之后拿到字节offer

Java 程序员 后端

【架构训练营】毕业总结

zclau

JUnit5学习之一:基本操作,菜鸟教程java在线编辑器下载

Java 程序员 后端

JVM总体概述,java高级开发面试经验

Java 程序员 后端

【架构训练营】毕业设计

zclau

java面试题,mybatis原理和实现机制

Java 程序员 后端

模块二作业

小鹿

Java高级特性之 IO流(1),三面蚂蚁金服(交叉面)定级阿里P6

Java 程序员 后端

Java高手是怎样炼成的?阿里P8技术大牛这份手写笔记告诉你答案!

Java 程序员 后端

Kubernetes任务调用Job与CronJob及源码分析(1)

Java 程序员 后端

架构设计流程

天天向上

架构实战营

Java面试经,nginx解决跨域原理

Java 程序员 后端

模块二作业

小朱

架构实战营

Java面试题超详细整理《多线程篇》,mongodb教程导入外部数据

Java 程序员 后端

kubebuilder实战之三:基础知识速览,mybatis运行原理步骤

Java 程序员 后端

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