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

来源:互联网 发布:麒麟linux操作系统下载 编辑:程序博客网 时间:2024/05/16 06:40

poject结构如下:


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

package hello;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic 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@EnableJpaRepositoriespublic 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官网学习的,有不对的地方欢迎指导




原创粉丝点击