stone2083

Spring Data JPA 简单介绍

背景
考虑到公司应用中数据库访问的多样性和复杂性,目前正在开发UDSL(统一数据访问层),开发到一半的时候,偶遇SpringData工程。发现两者的思路惊人的一致。
于是就花了点时间了解SpringData,可能UDSL II期会基于SpringData做扩展

SpringData相关资料
介绍:针对关系型数据库,KV数据库,Document数据库,Graph数据库,Map-Reduce等一些主流数据库,采用统一技术进行访问,并且尽可能简化访问手段。
目前已支持的数据库有(主要):MongoDB,Neo4j,Redis,Hadoop,JPA等

SpringData官方资料(强烈推荐,文档非常详细)
SpringData主页:http://www.springsource.org/spring-data
SpringDataJPA 指南文档:http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/ (非常详细)
SpringDataJPA Examples: https://github.com/SpringSource/spring-data-jpa-examples (非常详细的例子)

Spring-Data-Jpa简介
Spring Data Jpa 极大简化了数据库访问层代码,只要3步,就能搞定一切
1. 编写Entity类,依照JPA规范,定义实体
2. 编写Repository接口,依靠SpringData规范,定义数据访问接口(注意,只要接口,不需要任何实现)
3. 写一小陀配置文件 (Spring Scheme配置方式极大地简化了配置方式)

下面,我依赖Example中的例子,简单地介绍下以上几个步骤
User.java
User.java
没什么技术,JPA规范要求怎么写,它就怎么写

Repository.java
SimpleUserRepository.java
需要关注它继承的接口,我简单介绍几个核心接口
Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别
CrudRepository: 继承Repository,实现了一组CRUD相关的方法
PagingAndSortingRepository: 继承CrudRepository,实现了一组分页排序相关的方法
JpaRepository: 继承PagingAndSortingRepository,实现一组JPA规范相关的方法
JpaSpecificationExecutor: 比较特殊,不属于Repository体系,实现一组JPA Criteria查询相关的方法

不需要写任何实现类,Spring Data Jpa框架帮你搞定这一切。

Spring Configuration
Configuration.xml

核心代码只要配置一行:<jpa:repositories base-package="org.springframework.data.jpa.example.repository.simple" />即可。上面的仅仅是数据源,事务的配置而已。

至此,大功告成,即可运行
Sample.java

其中,写操作相对比较简单,我不做详细介绍,针对读操作,我稍微描述下:
Method Query: 方法级别的查询,针对
findByfindreadByreadgetBy等前缀的方法,解析方法字符串,生成查询语句,其中支持的关键词有:


Named Query: 针对一些复杂的SQL,支持原生SQL方式,进行查询,保证性能
Criteria Query: 支持JPA标准中的Criteria Query

备注:
本文只是简单介绍SpringDataJpa功能,要深入了解的同学,建议直接传送到官方网站

posted on 2011-08-25 15:18 stone2083 阅读(19830) 评论(12)  编辑  收藏 所属分类: java

Feedback

# re: Spring Data JPA 简单介绍 2011-08-25 16:35 rox

看到了Groovy的影子,非常不错。谢谢推荐!  回复  更多评论   

# re: Spring Data JPA 简单介绍 2011-08-25 16:41 stone2083

@rox
在使用上确实有一些动态脚本语言的影子,非常快捷。
但是它最大的优势还在于集成了不同数据源。像Relation Database,Document Store,KV Store,Hadoop。  回复  更多评论   

# re: Spring Data JPA 简单介绍 2011-08-27 22:38 buru

不错,转载一下,我试过SpringData的mongodb包,有空也写一篇  回复  更多评论   

# re: Spring Data JPA 简单介绍 2011-08-28 23:02 help

请教一下
“根据findBy方法字符串,生成查询语句”这个是怎么实现的啊,看了代码也没找到,还是不明白 望答复 谢谢
  回复  更多评论   

# re: Spring Data JPA 简单介绍 2011-08-29 11:27 stone2083

@help
请跟踪Bean初始化过程
1. QueryExecutorMethodInterceptor#QueryExecutorMethodInterceptor()
2. CreateIfNotFoundQueryLookupStrategy#resolveQuery()
Method Query不是具体查询方法,交由CreateQueryLookupStrategy动态创建查询方法
3. PartTreeJpaQuery进行具体处理,SQL Build见PartTree#buildTree()  回复  更多评论   

# re: Spring Data JPA 简单介绍 2011-10-23 10:15 diecui1202

浅显易懂,学习了~  回复  更多评论   

# re: Spring Data JPA 简单介绍 2011-10-24 09:51 stone2083

@diecui1202
什么时候换成自己的空间了?逛了一下,居然还没有技术文章。  回复  更多评论   

# re: Spring Data JPA 简单介绍 2014-04-22 22:44 最代码

Spring Data JPA 1.4.3 RELEASE 中文文档地址 http://www.zuidaima.com/share/1612462714375168.htm  回复  更多评论   

# re: Spring Data JPA 简单介绍 2014-04-23 12:49 stone2083

@最代码
不错  回复  更多评论   

# re: Spring Data JPA 简单介绍 2014-04-23 13:32 最代码

@stone2083
多谢  回复  更多评论   

# re: Spring Data JPA 简单介绍 2014-11-18 09:59 xhb

@help
直接在respository里定义接口,接口定义规则如表格所示:findBy开头后面跟查询条件,如:findByUsername jpa会自动实现select u from User u where u.username=?这样的查询语句,在service层无需实现,只需要调用就好了  回复  更多评论   

# re: Spring Data JPA 简单介绍 2015-02-13 23:31 zuidaima

springdata demo教程源代码下载:http://zuidaima.com/share/kspringdata-p1-s1.htm  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: