Spring对多个持久化框架提供了支持,包括Hibernate、iBATIS、JDO(Java Data Objects)以及JPA(Java Persistence API)。
本节介绍如何在Spring项目中配置使用JPA对数据库进行操作。
简介
Java持久化API诞生在EJB2实体Bean的废墟之上,并成为了下一代Java持久化标准。JPA是基于POJO的持久化机制,它从Hibernate和JDO上借鉴了很多新理念并加入了Java5注解的特性。Spring2.0之后,Spring首次集成了JPA的功能。
maven配置相关架包
引入使用JPA所需要的架包:
在maven中配置相关包之后,在Spring中使用JPA的第一步是在Spring应用上下文中将实体管理工厂(EntityManagerFactory)按照Bean的方式进行配置。
配置EntityManagerFactory
JPA定义了两种类型的实体管理器:
- 应用程序管理类型 (Application-Managed):应用程序直接请求实体管理器
- 容器管理类型(Container-Managed):应用程序访问JavaEE容器通过注入等方式获取实体管理器
两种实体管理器实现了同一个EntityManager接口,两种方式创建和管理EntityManager的方式不同,应用程序管理类型 (Application-Managed)由EntityManagerFactory创建,EntityManagerFactory通过PersistenceProvider的createEntityManagerFactory()方法得到。而容器管理类型(Container-Managed)的EntityManagerFactory是通过PersistenceProvider的createContainerEntityManagerFactory()得到。在Spring中,EntityManagerFactory分别由对应的工厂Bean创建: - 应用程序管理类型 :LocalEntityManagerFactoryBean
- 容器管理类型 :LocalContainerEntityManagerFactoryBean
在本项目中,我们采用容器管理类型的JPA,具体实现采用Hibernate,连接池采用c3p0,数据库使用MySQL。
以往常见的做法是需要一个persistence.xml文件来配置数据源,现在已经可以将数据源信息配置在Spring应用上下文中。
将数据库登录账户密码等信息都配置在jdbc.properties文件中。
测试
在MySQL中创建一些测试数据。
创建Goods实体:
通过EntityManager查询数据库:
编写Controller层接口:
测试: