写点什么

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

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

关注

评论

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

架构师训练营第 11 周学习总结

netspecial

极客大学架构师训练营

我膨胀了,测试必要商城小程序,用了3种方式!:)

清菡软件测试

App

极客时间架构师培训 1 期 - 第 11 周作业

Kaven

架构师系列之8:python网站压测工具

桃花原记

那些年,支撑尾款人们熬夜的AI

脑极体

阿里开源十亿级并发设计手册:数据库+缓存+消息队列+分布式+维护

Java架构追梦

Java 阿里巴巴 编程 架构 亿级流量

秒懂DHCP是什么

ShardingSphere Proxy 主从读写 入门使用

Java 主从读写 ShardingSphere

Spring 源码学习 06:AnnotatedBeanDefinitionReader

程序员小航

Java spring 源码 源码阅读

Defi挖矿软件系统开发|Defi挖矿APP开发

系统开发

几个大厂的研发类面试题你知道多少?(C/C++工程师方向)

linux大本营

c++ Linux 后台开发 架构师

Mysql Docker 主从配置

MySQL Docker 主从读写

架构师训练营第二周作业

J

极客大学架构师训练营

Sharding-Sphere Proxy 分库分表 简单示例

Java MySQL 分库分表 ShardingSphere-Proxy

第二周 框架设计 作业一 「架构师训练营 3 期」

胡云飞

极客大学架构师训练营 框架设计

DeFi交易所系统APP开发|DeFi交易所软件开发

系统开发

极客时间架构师训练营 1 期 - 第 11 周总结

Kaven

框架设计作业

cc

架构师训练营第二周学习心得

cc

LeetCode题解:874. 模拟行走机器人,模拟情境,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

深入了解Linux共享内存及函数详解(含编程示例)

ShenDu_Linux

Linux 程序员 内存 进程

Spring视图解析流程

无用且垂死的星辰

第二周 框架设计 学习总结

胡云飞

极客大学架构师训练营 框架设计

喝完可乐桶后程序员回归本源,开源Spring基础内容

小Q

Java spring 学习 源码 面试

区块链如何解决互联网为基础的广告困境?

CECBC

区块链 互联网广告

搞懂这篇文章,关于IO复用的问题就信手拈来了

程序员小灰

Linux 后台开发 io epoll Linux服务器开发

ShardingSphere Raw JDBC 主从示例

Java JDBC ShardingSphere

整天都在讨论使用SpringBoot,可你居然连缓存都不清楚

小Q

Java 缓存 学习 面试 springboot

吴桐:2021年中国区块链产业发展的六大趋势

CECBC

区块链 新基建

离开

成周

架构师养成第二课

万有引力

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