jpa
2015-06-09 16:02
260 查看
开始使用 Spring Data JPA
英文原文:Getting started with Spring Data JPA
标签: SpringData
140人收藏此文章, 我要收藏0595 推荐于
2年前 (共 9 段, 翻译完成于 09-18) (46评)
参与翻译(5人):
bigtiger02, 滄海一夢, lwei, TOTOTO_TOTO, sdzzboy
仅中文 | 中英文对照 | 仅英文 | 打印此文章
在我们刚刚发布项目Spring Data JPA的第一个里程碑时,我想给你一个关于它的简要介绍.正如你所知道的,Spring framework 对于基于JPA的数据存取层提供了支持.那么 Spring Data JPA 是如何添加到Spring中的呢?回答这个问题,我想从一个数据存取组件开始.这个组件提供了一个简单的域(domain),它是用纯JPA和Spring实现的,而且可以扩展和改进.在我们实现之后,我将用Spring Data JPA 来重构它. 你在以在 GitHub上找到这个小项目的每一次重构的详细指导. | 滄海一夢 翻译于 2年前 4人顶 顶 翻译的不错哦! |
为了保持简单,我从最简单常用的域开始:客户(Customer)和帐号(Account) |
?
滄海一夢
翻译于 2年前
5人顶
顶 翻译的不错哦!
这个被@Repository 注释的类抛出的异常可以被Spring的DataAccessException捕获。另外我们还用到了@Transactional 来保证 save(...) 操作的事务性和该类其他方法(这里是findByCustomer(...))的事务只读标识。这样会对数据库性能和我们持久化提供器的性能有一定的优化。 由于我们不想让程序员去决定什么时候调用EntityManager的merge(...)或者persist(...)方法。我们用了实体类主键字段内容来判断到底调用哪一个。这是判断逻辑是全局通用的所以不用对每一个域对象都去声明实现。查询方法也是很直观的,我们写一个查询,绑定一个参数然后执行这条查询并取得结果。这个方法名其实已经很直观了,其实我们可以根据方法名就推出查询语句,所以这里是可以提升一下的。(在后面可以直接按照这样的模式写方法名和参数而不需要去写实现,SPRING DATA JPA会根据你方法的命名自动转成SQL。(如果配合良好的数据库设计和视图设计,省了不少事情)) | TOTOTO_TOTO 翻译于 2年前 3人顶 顶 翻译的不错哦! |
在我们开始重构该实现之前,看一下示例项目中包含的那些在重构课程中能够运行的测试用例,确保那些代码现在依旧能用。下面我们就来看如何改善我们的实现类。 |
lwei
翻译于 2年前
1人顶
顶 翻译的不错哦!
为了让Spring创建一个实现该接口的bean,你仅需要使用Sping JPA"命名空间"并用适当元素激活其对repository 的支持。 ? ? | sdzzboy 翻译于 2年前 1人顶 顶 翻译的不错哦! |
下一步,我们将重构查询方法。并且使查询方法与保存方法遵循相同的委派策略。我们在存储库接口里面引入查询方法并且将我们原有方法委托给新引进的方法: ? 尝试再次运行测试案例,看看测试是否正常运行。打住,我们还没有实现forfindByCustomer()方法,是不?那它是如何工作的呢? | bigtiger02 翻译于 2年前 1人顶 顶 翻译的不错哦! |
当Spring Data JPA为创建AccountRepository接口创建Spring实例的时候,它会检查接口里面定义的所有查询方法并且 为它们每个都派生一个查询。默认情况下,Spring Data JPA 将自动解析方法名并以此创建一个查询,查询用标准JPA的API实现。在本例中findByCustomer(...)方法在逻辑上等同于JPQL 查询“select a from Account a where a.customer = ?1”。解析方法名称的解析器支持大量的关键字比如And,Or,GreaterThan,LessThan,Like,IsNull,Notand等等,如果您喜欢,您还可以添加ORDER |
?
?
bigtiger02
翻译于 2年前
2人顶
顶 翻译的不错哦!
到目前为止,一切都很好。以下两种方法都可以处理常见的场景:你希望给定查询能够分页而不是返回全部实体(比如一页10条记录)。眼下我们通过两个整数适当限制查询来实现,但这样做有两个问题,两个整数实际上只代表了一个方面,这里并没有明确这一点。除此之外,结果我们只返回了一个简单的list,所以我们丢掉了实际页面的元数据信息:这是第一页吗?这是最后一页吗?总共有多少页?Spring Data提供了一个抽象包括两个接口:Pageable(捕捉分页请求)和Page(捕获结果以及元信息)。让我们按照如下方式尝试添加findByLastname(…)到存储库接口中并重写findAll(…)和findByLastname(…)方法: ? | bigtiger02 翻译于 2年前 1人顶 顶 翻译的不错哦! |
在本文的课程中,我们把为存储库编写的代码减少到2个接口,包含3个方法一行XML: |
lwei
翻译于 2年前
1人顶
顶 翻译的不错哦!
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
相关文章推荐
- 设置系统时间
- 跳到文件指定位置加入版本信息
- 搭建Struts2开发环境并整合Spring3
- 搭建Spring3开发环境
- Tiny并行计算框架之使用介绍
- Tiny并行计算框架之实现机理
- iOS单例设计模式详解教程
- Tomcat启动不了
- 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
- Event.target
- redhat6 GCC安装
- COM学习笔记8_IDispatch (调度接口) 自动化
- Win10 10125中文语言包安装出现乱码的解决方法
- 【剑指offer】 面试题8: 旋转数组的最小数字
- chrome浏览器插件开发标准格式
- iOS-集成环信
- 《 Web应用测试 》笔记(第4 章-网络基础)
- 页面中调用函数--之${fn:}内置函数
- Android学习 1 -构建运行环境
- USB WiFi网卡驱动分析--经典