- 浏览: 958358 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
背景
考虑到公司应用中数据库访问的多样性和复杂性,目前正在开发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
1 /**
2 * User Entity Sample
3 *
4 * @author <a href="mailto:li.jinl@alibaba-inc.com">Stone.J</a> Aug 25, 2011
5 */
6 @Entity
7 public class User extends AbstractPersistable < Long > {
8
9 private static final long serialVersionUID = - 2952735933715107252L ;
10
11 @Column(unique = true )
12 private String username;
13 private String firstname;
14 private String lastname;
15
16 public String getUsername() {
17 return username;
18 }
19
20 public void setUsername(String username) {
21 this .username = username;
22 }
23
24 public String getFirstname() {
25 return firstname;
26 }
27
28 public void setFirstname(String firstname) {
29 this .firstname = firstname;
30 }
31
32 public String getLastname() {
33 return lastname;
34 }
35
36 public void setLastname(String lastname) {
37 this .lastname = lastname;
38 }
39
没什么技术,JPA规范要求怎么写,它就怎么写
Repository.java
1 /**
2 * User Repository Interface.
3 *
4 * @author <a href="mailto:li.jinl@alibaba-inc.com">Stone.J</a> Aug 25, 2011
5 */
6 public interface SimpleUserRepository extends CrudRepository < User, Long > , JpaSpecificationExecutor < User > {
7
8 public User findByTheUsersName(String username);
9
10 public List < User > findByLastname(String lastname);
11
12 @Query( " select u from User u where u.firstname = ? " )
13 public List < User > findByFirstname(String firstname);
14
15 @Query( " select u from User u where u.firstname = :name or u.lastname = :name " )
16 public List < User > findByFirstnameOrLastname(@Param( " name " ) String name);
17
18
需要关注它继承的接口,我简单介绍几个核心接口
不需要写任何实现类,Spring Data Jpa框架帮你搞定这一切。
Spring Configuration
1 < beans >
2 < bean id = " entityManagerFactory " class = " org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean " >
3 < property name = " dataSource " ref = " dataSource " />
4 < property name = " jpaVendorAdapter " >
5 < bean class = " org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter " >
6 < property name = " generateDdl " value = " true " />
7 < property name = " database " value = " HSQL " />
8 </ bean >
9 </ property >
10 < property name = " persistenceUnitName " value = " jpa.sample " />
11 </ bean >
12
13 < bean id = " transactionManager " class = " org.springframework.orm.jpa.JpaTransactionManager " >
14 < property name = " entityManagerFactory " ref = " entityManagerFactory " />
15 </ bean >
16
17 < jdbc:embedded - database id = " dataSource " type = " HSQL " />
18
19
20 < jpa:repositories base - package = " org.springframework.data.jpa.example.repository.simple " />
21 </ beans>
核心代码只要配置一行:<jpa:repositories base-package="org.springframework.data.jpa.example.repository.simple" />即可。上面的仅仅是数据源,事务的配置而已。
至此,大功告成,即可运行
1 /**
2 * Intergration test showing the basic usage of { @link SimpleUserRepository}.
3 *
4 * @author <a href="mailto:li.jinl@alibaba-inc.com">Stone.J</a> Aug 25, 2011
5 */
6 @RunWith(SpringJUnit4ClassRunner. class )
7 @ContextConfiguration(locations = " classpath:simple-repository-context.xml " )
8 @Transactional
9 public class SimpleUserRepositorySample {
10
11 @Autowired
12 SimpleUserRepository repository;
13 User user;
14
15 @Before
16 public void setUp() {
17 user = new User();
18 user.setUsername( " foobar " );
19 user.setFirstname( " firstname " );
20 user.setLastname( " lastname " );
21 }
22
23 // crud方法测试
24 @Test
25 public void testCrud() {
26 user = repository.save(user);
27 assertEquals(user, repository.findOne(user.getId()));
28 }
29
30 // method query测试
31 @Test
32 public void testMethodQuery() throws Exception {
33 user = repository.save(user);
34 List < User > users = repository.findByLastname( " lastname " );
35 assertNotNull(users);
36 assertTrue(users.contains(user));
37 }
38
39 // named query测试
40 @Test
41 public void testNamedQuery() throws Exception {
42 user = repository.save(user);
43 List < User > users = repository.findByFirstnameOrLastname( " lastname " );
44 assertTrue(users.contains(user));
45 }
46
47 // criteria query测试
48 @Test
49 public void testCriteriaQuery() throws Exception {
50 user = repository.save(user);
51 List < User > users = repository.findAll( new Specification < User > () {
52
53 @Override
54 public Predicate toPredicate(Root < User > root, CriteriaQuery <?> query, CriteriaBuilder cb) {
55 return cb.equal(root.get( " lastname " ), " lastname " );
56 }
57 });
58 assertTrue(users.contains(user));
59 }
60
其中,写操作相对比较简单,我不做详细介绍,针对读操作,我稍微描述下:
Method Query: 方法级别的查询,针对
findBy
, find
, readBy
, read
, getBy等前缀的方法,解析方法字符串,生成查询语句,其中支持的关键词有:
Named Query: 针对一些复杂的SQL,支持原生SQL方式,进行查询,保证性能
Criteria Query: 支持JPA标准中的Criteria Query
备注:
本文只是简单介绍SpringDataJpa功能,要深入了解的同学,建议直接传送到官方网站
评论
2. Mapreduce 不是数据库,分布式计算框架而已。
你只要在自己的service 层注入它,并直接调用就可以了。
Repository这个名词,我觉得来源于 《面向Domain编程》
即DomainModel的聚合。
Repository基础接口是没有CRUD的方法的。
org.springframework.data.repository.CrudRepository才有
spring data是在JPA之上的封装。
利用动态生成代码,实现Repository(DAO)能力。
(其实就是只要声明Repository,不用写里面的代码,就通过spring注入来用了。)
具体数据库访问是,数据关联关系是持久化底层处理的。
如果JPA实现用的是hibernate,那么底层就是hibernate处理数据关联关系。
Spring DATA 的作者好像是Hade的作者,概念类似。
你只要在自己的service 层注入它,并直接调用就可以了。
本人初学
抱歉问了个无聊的问题。
发表评论
-
最新上线的小站 格格衣柜
2012-12-13 18:43 13格格衣柜,www.gegeyigui.com,有兴趣可以去看看 ... -
fck 相关处理
2012-12-10 18:11 1055javascript获取和设置FCKeditor内容 ... -
【转】Java版DBHelper【简单】(MySQL数据库)
2012-06-18 17:47 15341、测试数据库 1.1 数据库数据 ... -
【转】细细品味Web——Json-Lib类库使用手册
2012-06-18 17:46 14931、JsonLib简介 Json ... -
freemarker 自定义标签问题
2012-05-05 10:47 1176倒腾半天,发现是使用标签时,出错了。[@cms_taobaok ... -
【转】freemarker中实现自定义标签(包含处理参数以及循环变量)(2.3.11版本以后的方式)
2012-05-04 14:34 2531博客分类: ... -
【转】freemarker中实现自定义标签(2.3.11版本以后的方式)
2012-05-04 14:32 1507博客分类: ... -
ajax 乱码
2011-07-26 14:24 1097// 异步通过订单获得订单明细,用于商品价格修改 @ ... -
freemarker 格式化
2011-07-05 14:06 3081freemarker数据格式化问题(即数值超过四位数时有逗号) ... -
object references an unsaved transient instance - save the transient instanc
2011-01-17 18:09 6406出现这个错误的原因是在保存该对象前,发现该对象包含有其他空的对 ... -
防止浏览器缓存css,js静态文件[转]
2011-01-11 16:58 2244什么情况下,要禁止静态文件缓存: 1、经常可能要改动的 js ... -
java 开源cms opencms的使用,如何去掉两个/opemcms路径的方法
2010-07-15 21:00 4687哈哈。。。经过本人测试成功: 买空间的朋友,因为无法配 ... -
通过百度获取天气预报[转]
2010-05-06 15:26 1473public class Getweather { ... -
javascript 跳转新发现 window.open 乱码处理
2010-04-09 20:57 14097搞了两三天的乱码处理,试了很多方法,过滤器啊,编码转换啊,试来 ... -
解决 连接关闭问题
2010-03-12 09:57 1413root cause org.springframewor ... -
远程登录不了em
2009-12-18 10:25 1163修改一下hostlist.ini列表就行了。 -
今天发现
2009-12-08 20:49 1172今天搞了半天jstl不显示 感觉太奇怪了,平时框架也没有问题啊 ... -
java 开发中 java的System.getProperty()方法可以获取的值
2009-11-13 16:54 1397java.version Java ... -
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
2009-11-09 22:05 43518所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒 ... -
SVN在linux下的安装 学习
2009-11-09 17:56 1266SVN在linux下的安装 ...
相关推荐
**Spring Data JPA** 是一个基于 **Java** 的开源框架,它是 **Spring Framework** 的一个模块,主要用于简化 **Java Persistence API (JPA)** 的使用。JPA 是 Java 平台上的一个标准,用于管理和持久化应用程序的...
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
至于压缩包中的“helloworld”文件,可能是一个简单的示例项目,通常会包含一个基础的Spring Data JPA配置,一个实体类,以及对应的Repository接口,用于展示Spring Data JPA的基本用法。通过查看这个例子,你可以更...
Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...
《Spring Data JPA从入门到精通》是一本深入解析Spring Data JPA的书籍,它以Spring Boot框架为核心,旨在帮助读者全面理解并熟练运用Spring Data JPA进行数据库操作。Spring Data JPA是Spring Framework的一个模块...
**Spring Data JPA 简单案例** Spring Data JPA 是 Spring 框架的一个模块,它为使用 JPA(Java Persistence API)提供了强大的支持,简化了数据访问层的开发。通过使用 Spring Data JPA,我们可以避免编写大量重复...
Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...
本教程将详细介绍 Spring Data JPA 的核心概念与使用方法,帮助开发者从基础入门到实现复杂查询的完整过程。 第一章:Spring Data JPA 入门 Spring Data JPA 简化了 JPA(Java Persistence API)的开发,通过约定...
- **强大的查询支持**:除了简单的 CRUD 方法,Spring Data JPA 还支持基于方法名的复杂查询,甚至可以使用 JPA Querydsl 或 Specification 进行更复杂的查询。 - **事务管理**:Spring Data JPA 结合 Spring 的事务...
在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...
Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互,JPA 是Java 开发者用来管理和持久化应用程序数据的一种标准。在这个“Spring Data JPA Demo”项目中,我们将深入探讨如何利用...
Spring Data JPA是Java开发中的一个关键框架,它简化了与关系型数据库的交互,特别是基于Java Persistence API (JPA)。这个框架是Spring生态系统的组成部分,为开发者提供了声明式数据访问的方式,允许通过简单的...
通过上面的介绍,我们了解到SpringDataJPA不但提高了代码的复用性,还降低了ORM框架切换的成本。如果项目需要更换底层的数据持久化框架,只需要更换相应的JPA实现即可,而应用程序代码则几乎不需要改动。这样的特性...
在Spring Boot框架中,Spring Data JPA的集成变得更加简单。Spring Boot通过自动配置,可以快速启动一个JPA应用,只需少量甚至无需配置。同时,Spring Boot还支持数据源的自动配置,使得开发者可以快速连接到数据库...
【描述】中的"简单的springMVC入门程序配置Spring data jpa亲测可完美运行"说明这是一个基于Spring MVC的项目,Spring MVC是Spring框架的一部分,用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构模式的...
**SpringBoot整合SpringData JPA** 是一个现代Java开发中的常见技术栈,它结合了Spring Boot的便捷性和Spring Data JPA的数据访问效率。Spring Boot简化了应用的初始搭建以及配置,而Spring Data JPA则是Spring ...
Spring Data JPA是Spring框架的一个模块,主要目的是简化Java企业级应用中数据访问层的开发。这个框架构建在JPA(Java Persistence API)之上,提供了一种声明式的方式来操作数据库,使得开发者无需编写大量的SQL...
Spring Data JPA是Spring生态系统中的一个重要组件,它为开发者提供了与JPA(Java Persistence API)交互的简化接口,极大地提高了数据访问的效率。本教程将深入探讨如何在Spring Boot项目中整合Spring Data JPA,...