- 浏览: 942573 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1006javascript获取和设置FCKeditor内容 ... -
【转】Java版DBHelper【简单】(MySQL数据库)
2012-06-18 17:47 14631、测试数据库 1.1 数据库数据 ... -
【转】细细品味Web——Json-Lib类库使用手册
2012-06-18 17:46 14501、JsonLib简介 Json ... -
freemarker 自定义标签问题
2012-05-05 10:47 1136倒腾半天,发现是使用标签时,出错了。[@cms_taobaok ... -
【转】freemarker中实现自定义标签(包含处理参数以及循环变量)(2.3.11版本以后的方式)
2012-05-04 14:34 2486博客分类: ... -
【转】freemarker中实现自定义标签(2.3.11版本以后的方式)
2012-05-04 14:32 1474博客分类: ... -
ajax 乱码
2011-07-26 14:24 1056// 异步通过订单获得订单明细,用于商品价格修改 @ ... -
freemarker 格式化
2011-07-05 14:06 3002freemarker数据格式化问题(即数值超过四位数时有逗号) ... -
object references an unsaved transient instance - save the transient instanc
2011-01-17 18:09 6358出现这个错误的原因是在保存该对象前,发现该对象包含有其他空的对 ... -
防止浏览器缓存css,js静态文件[转]
2011-01-11 16:58 2201什么情况下,要禁止静态文件缓存: 1、经常可能要改动的 js ... -
java 开源cms opencms的使用,如何去掉两个/opemcms路径的方法
2010-07-15 21:00 4616哈哈。。。经过本人测试成功: 买空间的朋友,因为无法配 ... -
通过百度获取天气预报[转]
2010-05-06 15:26 1427public class Getweather { ... -
javascript 跳转新发现 window.open 乱码处理
2010-04-09 20:57 14023搞了两三天的乱码处理,试了很多方法,过滤器啊,编码转换啊,试来 ... -
解决 连接关闭问题
2010-03-12 09:57 1360root cause org.springframewor ... -
远程登录不了em
2009-12-18 10:25 1082修改一下hostlist.ini列表就行了。 -
今天发现
2009-12-08 20:49 1086今天搞了半天jstl不显示 感觉太奇怪了,平时框架也没有问题啊 ... -
java 开发中 java的System.getProperty()方法可以获取的值
2009-11-13 16:54 1362java.version Java ... -
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
2009-11-09 22:05 43462所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒 ... -
SVN在linux下的安装 学习
2009-11-09 17:56 1214SVN在linux下的安装 ...
相关推荐
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
Spring Data JPA中文文档1.4.3
'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观...
spring注解完整版+spring data jpa官方文档中文翻译+JPA2.0官方文档 文档内容齐全 值得参考学习
使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速开发迭代,可用于开发模板,项目经过测试,可完美运行! 使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速...
spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码
技术架构:SpringMVC3+Spring3.1.2+Spring Data JPA+Maven 声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&...
仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot...
NULL 博文链接:https://mixo44.iteye.com/blog/1797079
Spring Data JPA中文文档[1.4.3].zip
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架...
Spring Data JPA Demo
3. 与Spring全家桶结合紧密: 4. 成熟的框架和架构 常⻅的SQL性能问题,如何优雅处理? 2. 错综复杂的关联关系如何应对? 3. 万恶的LazyException本质是什么? 4. ⾼并发⾼性能要求的API服务要⽤JPA吗?
NULL 博文链接:https://chentian114.iteye.com/blog/2287028
基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的...
该案例使用SpringBoot 整合了SPringData JPA,使用SpringData 开发简化了Dao层的开发量,简化了数据访问,使得持久化更加简单 !
第一章:Spring Data JPA入门 包括:是什么、能干什么、有什么、HelloWorld等 第二章:JpaRepository基本功能 包括:代码示例JpaRepository提供的CRUD功能,还有翻页、排序等功能 第三章:JpaRepository的查询 ...
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封 装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据库 的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩 展!学习并使用 ...
简单的springMVC入门程序配置Spring data jpa亲测可完美运行