`
H.Z
  • 浏览: 16739 次
  • 来自: 长沙
社区版块
存档分类
最新评论

spring之spring data jpa(入门一)

 
阅读更多

spring data 是一个用于建行数据库访问,并支持云服务的开源框架,其主要目标是使得对数据库的访问变得更方便快捷,并支持map-reduce框架和云计算数据服务.spring data包含多个字项目:

  • Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化
  • JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能
  • Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业.
  • Key-Value  - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装
  • Document - 集成文档数据库:CouchDB 和 MongoDB 并提供基本的配置映射和资料库支持
  • Graph - 集成 Neo4j 提供强大的基于 POJO 的编程模型
  • Graph Roo AddOn - Roo support for Neo4j
  • JDBC Extensions - 支持 Oracle RAD、高级队列和高级数据类型
  • Mapping - 基于 Grails 的提供对象映射框架,支持不同的数据库
  • Examples - 示例程序、文档和图数据库
  • Guidance - 高级文档

spring data jpa

是由spring提供的一个用于简化JPA开发的框架.它,可以极大的简化JPA的写法,可以再几乎不用写实现的情况下,实现对数据库的访问和操作,除了CRUD外,还包括如分页,排序等一些常用的功能.
spring data jpa提供的接口,也是spring data jpa的核心概念:
  1. Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
  2. CrudRepository :是Repository的子接口,提供CRUD的功能
  3. PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能.
  4. JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
  5. JpaSpecificationExecutor:用来做负责查询的接口
  6. Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可

参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/

http://my.oschina.net/ztlyde/blog/68513

示例

引入依赖:

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.9</version>
      <scope>test</scope>
    </dependency>

    <dependency>
    	<groupId>org.hibernate</groupId>
    	<artifactId>hibernate-entitymanager</artifactId>
    	<version>4.3.7.Final</version>
    </dependency>
    
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>5.1.33</version>
    </dependency>

    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context</artifactId>
    	<version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-orm</artifactId>
    	<version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-test</artifactId>
    	<version>4.1.1.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework.data</groupId>
    	<artifactId>spring-data-jpa</artifactId>
    	<version>1.7.1.RELEASE</version>
    </dependency>

 

spring的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

	<!-- 开启注解扫描 -->
	<context:component-scan base-package="com.zt.*"/>
	<!-- 开启注解事务支持 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
	<!-- 实体管理器工厂 
		LocalEntityManagerFactoryBean:适用于那些仅使用JPA进行数据访问的项目,
		该FactoryBean将根据JPA PersistenceProvider自动检测配置文件进行工作,
		一般从“META-INF/persistence.xml”读取配置信息,这种方式最简单,
		但不能设置Spring中定义的DataSource,且不支持Spring管理的全局事务,
		而且JPA 实现商可能在JVM启动时依赖于VM agent从而允许它们进行持久化类字节码转换(不同的实现厂商要求不同,需要时阅读其文档),不建议使用这种方式;
	-->
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
			<!-- 持久化单元的名称,此处为myJPA -->
		<property name="persistenceUnitName" value="myJPA"></property>
	</bean>
	
	<!-- Jpa 事务管理器  -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory"/>
	</bean>
	
	<!-- 启用扫描并自动创建代理的功能 ,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,
	为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,
	业务层便可以通过 Spring 自动封装的特性来直接使用该对象-->
	<jpa:repositories base-package="com.zt.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager">
		
	</jpa:repositories>

</beans>

 <jpa:repository> 还提供了一些属性和子标签,便于做更细粒度的控制。可以在 <jpa:repository> 内部使用 <context:include-filter>、<context:exclude-filter> 来过滤掉一些不希望被扫描到的接口

 

 persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
	version="2.0">
	<!-- 持久化单元.一个持久化单元可以创建一个EntityManagerFactory -->
	<persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
		<properties>
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/tests" />
			<property name="hibernate.connection.username" value="root" />
			<property name="hibernate.connection.password" value="root" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.use_sql_comments" value="false" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<!-- 设置外连接抓取树的最大深度 -->
			<property name="hibernate.max_fetch_depth" value="3"/>
		</properties>
	</persistence-unit>
</persistence>

 实体对象:

@Entity
@Table(name="t_accountinfo")
public class User implements Serializable {

	@Id
	@GeneratedValue
	private Long accountId;
	
	@Column(length=20)
	private String balance;
//....

}

UserDao:

让持久层接口 UserDao 继承 Repository 接口。该接口使用了泛型,需要为其提供两个类型:第一个为该接口处理的域对象类型,第二个为该域对象的主键类型.

public interface UserDao  extends Repository<User, Long>{
	
	public void save(User accountInfo);
	
	public User findByAccountId(Long accountId);
}

userService:

public interface UserService {
	
	public void save(String name);
	
	public User findByAccountId(Long accountId); 
}

 UserServiceImpl:

 

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserDao userDao;

	public void save(String name) {
		User accountInfo = new User(name);
		userDao.save(accountInfo);
	}

	public User findByAccountId(Long accountId) {
		
		return userDao.findByAccountId(accountId);
	}
}

测试:

@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest {
	@Autowired
	private UserService userService;
	
	@Test
	public void test() {
		userService.save("嘿嘿");
	}
	
	@Test
	public void test01(){
		User a = userService.findByAccountId(1L);
		System.out.println(a.getBalance());
	}
}

 此时,完全没有写UserDaoImpl,甚至都没有这个类.框架已经为我们完成了业务逻辑.查看源码,可以找到针对JpaRepository和JpaSpecificationExecutor有一个实现类,SimpleJpaRepository.class,这个类实现了刚才所提的两个接口。而Spring在给我们注入实现类的时候,就正是这个SimpleJpaRepository.class.

 

对UserDao接口还有一种写法,通过注解.

与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。.

@RepositoryDefinition(domainClass = AccountInfo.class, idClass = Long.class) 
 public interface UserDao { 
  …… 
} 

 

  • 大小: 8.5 KB
分享到:
评论

相关推荐

    spring注解+spring data jpa文档+JPA文档.rar

    在IT领域,Spring框架是Java开发中的核心工具之一,它为构建企业级应用程序提供了全面的解决方案。Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过...

    Spring Data JPA从入门到精通

    'SpringDataJPA从入门到精通'以SpringBoot为技术基础 从入门到精通 由浅入深地介绍SpringDataJPA的使用。有语法 有实践 有原理剖析。'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、...

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    Spring Data JPA 笔记

    Spring Data JPA则是在JPA之上构建的一层抽象,它扩展了JPA的功能,提供了更多的便利。例如,Spring Data JPA支持自动化的查询生成,只需定义Repository接口,无需编写任何实现代码,就可以执行CRUD(创建、读取、...

    spring data jpa入门实例

    【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...

    Spring Data JPA入门项目02

    在"Spring Data JPA入门项目02"中,你将学习如何在实际项目中应用这些概念,创建一个用户管理应用,其中包括用户排序和分页功能。通过对`usermanage1_2`这个文件的学习,你可以了解到如何配置Spring Data JPA,创建...

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    1. **Repository Abstraction**:这是 Spring Data JPA 的核心特性之一。它提供了一种声明式的数据访问接口,允许开发者定义自定义的查询方法,而不需要手动编写 SQL 或者 HQL(Hibernate Query Language)。例如,...

    spring data jpa 入门例子

    Spring Data JPA是Spring框架的一个模块,用于简化Java Persistence API(JPA)的使用,它提供了数据访问的抽象层,让开发者能够以更简洁的方式与数据库进行交互。本入门例子将帮助你理解并掌握Spring Data JPA的...

    Spring Boot整合SpringDataJPA

    Spring Data JPA是Spring生态系统中的一个重要组件,它为开发者提供了与JPA(Java Persistence API)交互的简化接口,极大地提高了数据访问的效率。本教程将深入探讨如何在Spring Boot项目中整合Spring Data JPA,...

    spring Data Jpa入门

    Spring Framework对JPA的支持本身就很强大,我们不用理会EntityManager的创建,事务处理等等.Spring又进步了,只需要声明一下方法接口,Spring Data JPA可以帮你完成数据访问层的实现代码,开发者把更多的心思放在业务...

    Spring Data JPA.zip

    Spring Data JPA 是 Spring Framework 的一个重要模块,它为 Java Persistence API (JPA) 提供了便捷的数据访问层。这个框架简化了数据库操作,使得开发人员能够以声明式的方式处理数据访问,而无需编写大量的 CRUD...

    Spring Data JPA入门项目01

    Spring Data JPA是Spring框架的一个重要模块,它简化了与Java Persistence API (JPA)的交互,使得数据库操作变得更加便捷。在这个"Spring Data JPA入门项目01"中,我们将探讨如何利用Spring Data JPA来实现基本的...

    Spring-data-jpa常用教程.pdf

    Spring-data-jpa 是 Spring 家族中的一个重要成员,它主要用于简化基于 Java Persistence API (JPA) 的数据访问层(DAO)的开发工作。JPA 作为 Java 平台的一种标准,旨在为 Java 应用程序提供一种通用的对象关系...

    spring学习:spring data jpa

    Spring Data JPA是Spring框架的一个模块,主要目的是简化Java企业级应用中数据访问层的开发。这个框架构建在JPA(Java Persistence API)之上,提供了一种声明式的方式来操作数据库,使得开发者无需编写大量的SQL...

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例.zip

    总的来说,"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"是一个全面展示Spring生态系统的示例项目,涵盖了Web应用开发的主要方面:请求处理、数据持久化和用户界面。通过这个实例,开发者可以学习...

    spring data jpa 教程

    第一章:Spring Data JPA 入门 Spring Data JPA 简化了 JPA(Java Persistence API)的开发,通过约定优于配置的方式,让开发者能够更加专注于业务逻辑而不是数据访问层的实现细节。使用 Spring Data JPA,可以快速...

    SpringMVC+Spring+Spring Data JPA+Maven

    技术架构:SpringMVC3+Spring3.1.2+Spring Data JPA+Maven 声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&...

Global site tag (gtag.js) - Google Analytics