用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 Data JPA 基于内存存储pojo的简单案例
- Spring Data Jpa案例
- Spring-data-jpa的动态查找案例
- Spring Data JPA的简单使用
- 关于spring-data-jpa的简单介绍
- 基于Spring boot的Spring data jpa连接MySQL数据库
- Spring Data JPA 简单介绍
- spring data jpa 简单教程
- Spring Data JPA 简单介绍
- Spring Data JPA 简单介绍
- Spring Data JPA简单使用
- Spring Data JPA 简单介绍
- Spring Data JPA 简单介绍
- Spring Data JPA 简单介绍
- Spring Data JPA 简单介绍
- Spring Data Jpa简单入门
- Spring Data JPA简单实例
- Spring Data JPA简单学习
- 面试之BI-SQL--table转换[2]
- 关于jquery命名的冲突问题
- NSNotification(消息机制)
- 算法竞赛入门经典第二章练习
- 基于XML数据库的学生信息管理系统的设计与实现
- 用Spring Data JPA 基于内存存储pojo的简单案例
- IOS仿网易新闻客户端左右侧栏
- 【Cocos2d游戏开发之一】搭建cocos2d游戏引擎环境
- mysql常用语句
- 仿微信启动界面
- 6句话,绝对不能对上司说!
- iOS 网络判断
- 1、java虚拟机方法区内存模型
- Linux软连接和硬链接———最精辟的分析