spring data 之 Spring Data JPA

原创 2013年12月02日 23:52:49

Spring Data 是一些令人兴奋的技术公司和开发人员开发的,让用新的数据库访问技术使用更方便。包含了多个子项目。
http://spring.io/guides/gs/accessing-data-jpa/

定义简单的实体类Customer:

//@Entity表明该实体未JPA实体,对应数据库中的Customer表,@Table
@Entity
public class Customer {

//@Id so that JPA will recognize it as the object’s ID. The id property is also annotated with @GeneratedValue to indicate that the ID should be generated automatically.

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String firstName;
    private String lastName;

    protected Customer() {}

    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, firstName='%s', lastName='%s']",
                id, firstName, lastName);
    }
}
Spring Data JPA 关注在关系型数据库使用JPA存储数据。最引人注目的功能是在运行时从一个respoitory接口 自动创建repository实现类。
public interface CustomerRepository extends CrudRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
}
CustomerRepository 继承了CrudRepository 接口,通过泛型,指定了实体类型和ID类型为Customer和Long。
CrudRepository  包括多个持久化方法,包括保存、删除和查找Customer实体。Spring Data JPA同样允许自定义其它的查询方法。


EnableJpaRepositories 注解,表明Spring Data JPA遍历任何实现了org.springframework.data.repository.Repository接口的接口,然后自动生成它的实现类。
@Configuration
@EnableJpaRepositories
public class Application {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().setType(H2).build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan("hello");
        return lef;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.H2);
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager();
    }


    public static void main(String[] args) {
        AbstractApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        CustomerRepository repository = context.getBean(CustomerRepository.class);

        // save a couple of customers
        repository.save(new Customer("Jack", "Bauer"));
        repository.save(new Customer("Chloe", "O'Brian"));
        repository.save(new Customer("Kim", "Bauer"));
        repository.save(new Customer("David", "Palmer"));
        repository.save(new Customer("Michelle", "Dessler"));

        // fetch all customers
        Iterable<Customer> customers = repository.findAll();
        System.out.println("Customers found with findAll():");
        System.out.println("-------------------------------");
        for (Customer customer : customers) {
            System.out.println(customer);
        }
        System.out.println();

        // fetch an individual customer by ID
        Customer customer = repository.findOne(1L);
        System.out.println("Customer found with findOne(1L):");
        System.out.println("--------------------------------");
        System.out.println(customer);
        System.out.println();

        // fetch customers by last name
        List<Customer> bauers = repository.findByLastName("Bauer");
        System.out.println("Customer found with findByLastName('Bauer'):");
        System.out.println("--------------------------------------------");
        for (Customer bauer : bauers) {
            System.out.println(bauer);
        }
        context.close();
    }
}

maven pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springframework</groupId>
    <artifactId>gs-accessing-data-jpa</artifactId>
    <version>0.1.0</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>0.5.0.M6</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>http://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>org.jboss.repository.releases</id>
            <name>JBoss Maven Release Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>http://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

Spring Data JPA框架

Spring Data JPA
  • shuaicihai
  • shuaicihai
  • 2017年02月11日 21:20
  • 901

Spring Data JPA 实战(一)-体系结构及基本配置

Spring Data JPA原理与应用(一) 一.Spring DataJPA介绍 使用Spring Data Repository将程序员从大量重复繁杂的数据库层操作中解放啊出来。 二.Repos...
  • sunhuiliang85
  • sunhuiliang85
  • 2017年03月05日 23:29
  • 475

spring data jpa 入门

初衷本文是spring data jpa 入门级的操作,实现CRUD操作,详细的概念可以参考文末的文章。参考网上一些文章,实际coding的时候还是出好多错误,这里记录摸索填坑的过程。...
  • RickyIT
  • RickyIT
  • 2017年01月12日 17:15
  • 3533

Spring Data JPA 增删改查

Spring Data JPA 增删改查Spring Data是Spring提供的对数据库的访问方式而Spring Data JPA是Spring Data的一部分,是JPA的Spring 实现方案。...
  • tyyytcj
  • tyyytcj
  • 2017年07月28日 20:34
  • 4007

spring data jpa的使用

spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联...
  • ftx2540993425
  • ftx2540993425
  • 2017年02月23日 18:06
  • 3325

Spring Data JPA简单实例

转自:http://itindex.net/detail/47162-spring-data-jpa 我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度。...
  • MyArrow
  • MyArrow
  • 2016年03月03日 09:39
  • 4183

跟着问题学习Spring Data Jpa----Spring Data Jpa配置

工具:eclipse,Maven 这里提到的内容是在Spring Boot为框架的基础上进行的。 首先建立一个Maven  -webapp工程,引入Spring Boot相关的依赖。 在appli...
  • u010429286
  • u010429286
  • 2016年10月02日 18:04
  • 906

Spring Data JPA入门

Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 ...
  • z69183787
  • z69183787
  • 2014年06月12日 17:07
  • 26998

Spring Data JPA - 参考文档-3

参考文档 4. JPA存储库 本章将指出JPA对知识库的支持。这建立在使用Spring Data Repositories中解释的核心存储库支持上。所以要确保你对这里解释的基本概念有一个...
  • qq_35873847
  • qq_35873847
  • 2017年11月23日 16:26
  • 223

Spring Data jpa搭建+配置详解

我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度。   在持久层的业务逻辑方面,Spring开源组织又给我们带来了同样优秀的Spring Data...
  • u012841509
  • u012841509
  • 2014年04月16日 09:53
  • 3739
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring data 之 Spring Data JPA
举报原因:
原因补充:

(最多只允许输入30个字)