用Spring Data JPA 基于内存存储pojo的简单案例

poject结构如下:


Customer.java类是一个pojo类,代码如下:

 

package hello;



import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;



@Entity

public class Customer {



    @Id

    @GeneratedValue(strategy=GenerationType.AUTO)

    private long id;

    private String firstName;

    private String lastName;



    private 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);

    }



}

@Entity:说明该类是一个jpa entity,如果缺少@Table注解则默认匹配表Customer

 

@Id:jpa通过它定义识别对象Id,使用注解@GeneratedValue让id自动增长

toString:重写了对象打印出来的方法

CustomerRepository.java是jpa用来存储Customer对象的仓库。

 

package hello;



import java.util.List;



import org.springframework.data.jpa.repository.JpaRepository;



public interface CustomerRepository extends JpaRepository<Customer, Long> {



    List<Customer> findByLastName(String lastName);



}


CustomerRepository继承了JpaRepository,除了能使用基本的增删改查外,还可以自己定义查找方法,如:findByLastName,关键在于findBy后面的属性要与Customer中的属性对应,在eclipse中编写的时候如果没有对应的属性eclipse也会提示你属性找不到。

 

这里只定义了一个接口,并没有具体实现,包括findByLastName方法,为什么?这就是Spring Data Jpa的魅力之处,因为它致力于在运行程序的时候从Repository接口处自动为它创建相应实现类。通过@EnableJpaRepositories注解实现。

Application.java应用主类,Spring Data JPA测试类

 

package hello;



import static org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType.H2;



import java.util.List;



import javax.persistence.EntityManagerFactory;

import javax.sql.DataSource;



import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.support.AbstractApplicationContext;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;

import org.springframework.orm.jpa.JpaTransactionManager;

import org.springframework.orm.jpa.JpaVendorAdapter;

import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

import org.springframework.orm.jpa.vendor.Database;

import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

import org.springframework.transaction.PlatformTransactionManager;



@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(EntityManagerFactory entityManagerFactory) {

        return new JpaTransactionManager(entityManagerFactory);

    }





    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

        List<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();

    }



}


@EnableJpaRepositories:告诉JPA找到继承了repository的接口,并为它创建相应的实现类,JpaRepository也继承了repository。

 

DataSource:声明一个存储对象的数据库

LocalContainerEntityManagerFactoryBean:对象的操作类,通过lef.setPackagesToScan("hello");避免了创建persistence.xml,它告诉JPA到hello包下面找bean类

JpaVendorAdapter:为LocalContainerEntityManagerFactoryBean定义了基于hibernate的JPA适配器

PlatformTransactionManager:用于处理事务持久化

最后运行程序,结果如下:

 

Customers found with findAll():

-------------------------------

Customer[id=1, firstName='Jack', lastName='Bauer']

Customer[id=2, firstName='Chloe', lastName='O'Brian']

Customer[id=3, firstName='Kim', lastName='Bauer']

Customer[id=4, firstName='David', lastName='Palmer']

Customer[id=5, firstName='Michelle', lastName='Dessler']



Customer found with findOne(1L):

--------------------------------

Customer[id=1, firstName='Jack', lastName='Bauer']



Customer found with findByLastName('Bauer'):

--------------------------------------------

Customer[id=1, firstName='Jack', lastName='Bauer']

Customer[id=3, firstName='Kim', lastName='Bauer']

该项目需要用到的jar包,通过maven的pom.xml获得

 

pom.xml

 

<?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.M4</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>



    <properties>

        <!-- use UTF-8 for everything -->

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <start-class>hello.Application</start-class>

    </properties>



    <build>

        <plugins>

            <plugin> 

                <artifactId>maven-compiler-plugin</artifactId> 

                <version>2.3.2</version> 

            </plugin>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>



    <repositories>

        <repository>

            <id>spring-snapshots</id>

            <name>Spring Snapshots</name>

            <url>http://repo.spring.io/libs-snapshot</url>

            <snapshots>

                <enabled>true</enabled>

            </snapshots>

        </repository>

        <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-snapshots</id>

            <name>Spring Snapshots</name>

            <url>http://repo.spring.io/libs-snapshot</url>

            <snapshots>

                <enabled>true</enabled>

            </snapshots>

        </pluginRepository>

        <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官网学习的,有不对的地方欢迎指导




 

你可能感兴趣的:(spring)