1.概述

本教程显示了如何使用Hibernate作为持久性提供程序使用JPA设置Spring

有关使用基于Java的配置和项目的基本Maven pom设置Spring上下文的分步介绍,请参阅本文 。

2. Java的JPA Spring配置

要在Spring项目中使用JPA, 需要设置EntityManager

这是配置的主要部分,它是通过Spring工厂bean完成的,即更简单的LocalEntityManagerFactoryBean更灵活的LocalContainerEntityManagerFactoryBean 。 此处使用后一个选项,以便可以在其上配置其他属性:

@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig{@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource());em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" });JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();em.setJpaVendorAdapter(vendorAdapter);em.setJpaProperties(additionalProperties());return em;}@Beanpublic DataSource dataSource(){DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/spring_jpa");dataSource.setUsername( "tutorialuser" );dataSource.setPassword( "tutorialmy5ql" );return dataSource;}@Beanpublic PlatformTransactionManager transactionManager(){JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject() );return transactionManager;}@Beanpublic PersistenceExceptionTranslationPostProcessor exceptionTranslation(){return new PersistenceExceptionTranslationPostProcessor();}Properties additionalProperties() {return new Properties() {{  // Hibernate Specific: setProperty("hibernate.hbm2ddl.auto", "create-drop");setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");}};}
}

另外,请注意,在Spring 3.2之前, cglib必须位于类路径中才能使Java @Configuration类起作用。 为了更好地理解cglib作为依赖项的需求,请参阅Spring中有关cglib工件的讨论 。

3.使用XML的JPA Spring配置

与XML相同的Spring配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource" /><property name="packagesToScan" value="org.baeldung.persistence.model" /><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /></property><property name="jpaProperties"><props><prop key="hibernate.hbm2ddl.auto">create-drop</prop><prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop></props></property></bean><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/spring_jpa" /><property name="username" value="tutorialuser" /><property name="password" value="tutorialmy5ql" /></bean><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="myEmf" /></bean><tx:annotation-driven /><bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /></beans>

在XML中配置Spring和基于Java的新配置之间有一个相对小的差异–在XML中,对另一个bean的引用可以指向该bean或该bean的bean工厂。 但是在Java中,由于类型不同,编译器不允许这样做,因此首先从Bean工厂中检索EntityManagerFactory ,然后将其传递给事务管理器:

txManager.setEntityManagerFactory( this.entityManagerFactoryBean()。getObject() );

4.完全不用XML

通常,JPA通过META-INF / persistence.xml文件定义一个持久性单元。 从Spring 3.1开始,不再需要persistence.xml - LocalContainerEntityManagerFactoryBean现在支持'packagesToScan'属性,可以在其中指定要扫描@Entity类的软件包。

该文件是最后要删除的XML片段–现在, 无需使用XML即可完全​​设置JPA。

4.1。 JPA属性

JPA属性通常在persistence.xml文件中指定; 或者,可以将属性直接指定给实体管理器工厂bean:

factoryBean.setJpaProperties(this.additionalProperties());

附带说明一下,如果Hibernate将是持久性提供程序,则这将是指定Hibernate特定属性的方式。

5. Maven配置

除了Spring Core和持久性依赖关系(在Spring with Maven教程中详细显示)之外,我们还需要在项目中定义JPA和Hibernate,以及MySQL连接器 :

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.2.4.Final</version><scope>runtime</scope>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version><scope>runtime</scope>
</dependency>

请注意,MySQL依赖项作为参考包括在内-需要驱动程序来配置数据源,但是任何受Hibernate支持的数据库都可以。

六,结论

本教程说明了如何使用XML和Java配置在Spring中使用Hibernate配置JPA

我们还讨论了如何摆脱通常与JPA相关联的XML的最后一部分– persistence.xml 。 最终结果是一个轻量级的,干净的DAO实现,几乎没有依赖Spring的编译时。

可以在github项目中找到此Spring JPA教程的实现–这是一个基于Eclipse的项目,因此应该很容易直接导入和运行。

参考: Baeldung博客中的Spring 3和JPA与Hibernate的 合作,来自我们的JCG合作伙伴 Eugen Paraschiv。

翻译自: https://www.javacodegeeks.com/2011/12/persistence-layer-with-spring-31-and_14.html

Spring 3.1和JPA的持久层相关推荐

  1. Spring Data JPA的持久层

    1.概述 本文将重点介绍Spring 3.1,JPA和Spring Data的持久层的配置和实现. 有关使用基于Java的配置和项目的基本Maven pom设置Spring上下文的分步介绍,请参阅本文 ...

  2. Spring 3.1和Hibernate的持久层

    1.概述 本文将展示如何使用Spring和Hibernate实现DAO . 有关核心的Hibernate配置,请参阅有关带​​有Spring的Hibernate 3和Hibernate 4的文章. 2 ...

  3. 【SpringBoot】SpringBoot——整合持久层技术

    文章目录 5. 整合持久层技术 5.1 整合JdbcTemplate 5.2 整合MyBatis 5.3 Spring Data JPA 5.3.1 JPA.Spring Data.Spring Da ...

  4. Spring基础专题——第七章(持久层整合)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  5. SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

    一.JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范.主要是为了简化持久层开发以及整合ORM技术,结束H ...

  6. 【Spring 持久层】Spring 事务开发、事务属性详解

    持久层 事务回顾 Spring 事务编程开发 Spring 中的事务属性(Transaction Attribute) 隔离属性(ISOLATION) 传播属性(PROPAGATION) 只读属性(r ...

  7. 【Spring 持久层】Spring 与 Mybatis 整合

    持久层 持久层整合总述 Mybatis 开发步骤回顾 Mybatis 开发中存在的问题 Spring 与 Mybatis 整合思路 Spring 与 Mybatis 整合的开发步骤 Spring 与 ...

  8. [Spring Boot 2]整合持久层技术

    持久层技术,简单来说,就是通过操纵对象来操作数据库.(具体见前言部分) 本期博客继续深入Spring Boot技术,值得一提的是,尽管Spring Boot操作起来还是不错的,看都看明白,但还是强烈建 ...

  9. Spring使用JPA进行Dao层的数据访问以及事务管理

    在上篇文章中,我们完成了SSH+JPA+Mysql的整合: https://blog.csdn.net/a745233700/article/details/81413306 在这篇文章中,我们主要介 ...

最新文章

  1. 使用Linux进行缓冲区溢出实验的配置记录
  2. 推荐系统常用术语 [ACM暑校]
  3. STM32L1X系列GPIO运用
  4. 微信支付 企业转账 小程序发红包 提现 发红包 企业支付等遇到的问题
  5. java mongodb 模糊查询_Java操作MongoDB插入数据进行模糊查询与in查询功能的方法
  6. bootstrap table 主子表 局部数据刷新(刷新子表)
  7. 【UWP】批量修改图标尺寸
  8. 简单的MySql游标创建
  9. oracle_linux安装oracle_12.1.0
  10. layu多个文件上传php,文件上传 · ThinkPHP6.0 · 看云
  11. scrapy信号扩展
  12. CamtasiaStudio如何导出视频上传优酷实现高清
  13. 计算机知识演讲稿,乔布斯的演讲稿 我们的IT梦想
  14. 什么是ARP?ARP作用和使用场景
  15. 教你怎样混社会[转]
  16. Catching Cheaters (LCS变形)
  17. Windows XP常见进程列表
  18. 【Crypto】BUGKU-抄错的字符
  19. 计算机网络操作试题2级,计算机网络管理员操作模拟试题-二级.pdf
  20. C++ 单向链表 —— 初始化、插入、返回第一个节点、删除、查找、长度、打印、反转(逆序)

热门文章

  1. java 线性回归算法_线性搜索或顺序搜索算法在Java中如何工作? 示例教程
  2. zing jvm_Zing加快了JVM应用程序的预热
  3. react api_使用Java EE 8中的React式API加速服务
  4. java线程池延期执行一次_Java使用者的延期执行
  5. junit junit_使用junit做其他事情
  6. JMetro版本11.6和8.6发布
  7. 如何使用可外部化的接口在Java中自定义序列化
  8. Java中的状态设计模式
  9. java 快死了_如果Java快死了,那么它肯定看起来非常健康
  10. 性能测试脚本的编写和调试_编写自动调试器以在测试执行期间捕获异常