1.概述

本文将重点介绍通过Spring设置Hibernate 3 –我们将研究如何同时使用XML和Java配置通过Hibernate 3和MySQL设置Spring 3。

2. Hibernate 3的Java Spring配置

使用Spring和Java配置来设置Hibernate 3很简单:

import java.util.Properties;
import javax.sql.DataSource;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.google.common.base.Preconditions;@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.baeldung.spring.persistence" })
public class PersistenceConfig {@Autowiredprivate Environment env;@Beanpublic AnnotationSessionFactoryBean sessionFactory() {AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();sessionFactory.setDataSource(restDataSource());sessionFactory.setPackagesToScan(new String[] { "org.baeldung.spring.persistence.model" });sessionFactory.setHibernateProperties(hibernateProperties());return sessionFactory;}@Beanpublic DataSource restDataSource() {BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));dataSource.setUrl(env.getProperty("jdbc.url"));dataSource.setUsername(env.getProperty("jdbc.user"));dataSource.setPassword(env.getProperty("jdbc.pass"));return dataSource;}@Beanpublic HibernateTransactionManager transactionManager() {HibernateTransactionManager txManager = new HibernateTransactionManager();txManager.setSessionFactory(sessionFactory().getObject());return txManager;}@Beanpublic PersistenceExceptionTranslationPostProcessor exceptionTranslation() {return new PersistenceExceptionTranslationPostProcessor();}Properties hibernateProperties() {return new Properties() {{setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));}};}
}

与XML配置(如下所述)相比,配置中的一个Bean访问另一个Bean的方式略有不同。 在XML中, 指向bean或指向能够创建该bean的bean工厂之间没有区别。 由于Java配置是类型安全的-不再直接指向Bean工厂-我们需要从Bean工厂中手动检索Bean:

txManager.setSessionFactory(sessionFactory().getObject());

同样,我们也可以使用XML配置来设置Hibernate 3

<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><context:property-placeholder location="classpath:persistence-mysql.properties" /><bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="packagesToScan" value="org.baeldung.spring.persistence.model" /><property name="hibernateProperties"><props><prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop><prop key="hibernate.dialect">${hibernate.dialect}</prop></props></property></bean><bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.user}" /><property name="password" value="${jdbc.pass}" /></bean><bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/></beans>

然后,使用@Configuration类将该XML文件引导到Spring上下文中:

@Configuration
@EnableTransactionManagement
@ImportResource({ "classpath:persistenceConfig.xml" })
public class PersistenceXmlConfig {//
}

对于这两种配置类型,JDBC和Hibernate特定的属性都存储在属性文件中:

# jdbc.X
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate_dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql
# hibernate.X
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop

4. Spring,Hibernate和MySQL

上面的示例使用MySQL 5作为配置有Hibernate的基础数据库-但是,Hibernate支持多个基础SQL数据库 。

4.1。 司机

通过提供给数据源jdbc.driverClassName属性配置驱动程序类名称。

在上面的示例中,从本文开头的pom中定义的mysql-connector-java依赖项将其设置为com.mysql.jdbc.Driver

4.2。 方言

通过提供给Hibernate SessionFactory hibernate.dialect属性来配置方言。

在上面的示例中,将其设置为org.hibernate.dialect.MySQL5Dialect,因为我们使用MySQL 5作为基础数据库。 还有其他几种支持MySQL的方言

  • org.hibernate.dialect.MySQL5InnoDBDialect –适用于具有InnoDB存储引擎MySQL 5.x
  • org.hibernate.dialect.MySQLDialect –适用于5.x之前MySQL
  • org.hibernate.dialect.MySQLInnoDBDialect –适用于使用InnoDB存储引擎的5.x之前MySQL
  • org.hibernate.dialect.MySQLMyISAMDialect –适用于带有ISAM存储引擎的所有MySQL版本

Hibernate 支持每个支持的数据库的SQL方言 。

5.用法

至此,Hibernate 3已通过Spring进行了完整配置,我们可以在需要时直接注入原始的Hibernate SessionFactory

public abstract class FooHibernateDAO{@AutowiredSessionFactory sessionFactory;...protected Session getCurrentSession(){return sessionFactory.getCurrentSession();}
}

6. Maven

要将Spring Persistence依赖项添加到pom,请参见Spring with Maven示例 –我们需要定义spring-contextspring-orm

继续使用Hibernate 3,Maven依赖项很简单:

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>3.6.10.Final</version>
</dependency>

然后,要使Hibernate使用其代理模型,我们还需要javassist

<dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.18.0-GA</version>
</dependency>

在本教程中,我们将使用MySQL作为数据库,因此我们还需要:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.25</version><scope>runtime</scope>
</dependency>

最后,我们将不再使用Spring数据源实现– DriverManagerDataSource ; 相反,我们将使用可用于生产环境的连接池解决方案-Tomcat JDBC连接池:

<dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-dbcp</artifactId><version>7.0.41</version>
</dependency>

7.结论

在这个例子中, 我们使用Spring配置了Hibernate 3 –都使用Java和XML配置。 这个简单项目的实现可以在github项目中找到–这是一个基于Eclipse的项目,因此应该很容易直接导入和运行。

参考:来自bakgung博客的JCG合作伙伴 Eugen Paraschiv 提供的Spring的Hibernate 3 。

翻译自: https://www.javacodegeeks.com/2013/05/hibernate-3-with-spring.html

SpringHibernate3相关推荐

  1. Struts+Spring+Hibernate整合入门详解

    标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRI ...

  2. spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解

    spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环 ...

  3. spring框架所有包解释

    2019独角兽企业重金招聘Python工程师标准>>> spring依赖的jar包如下: 下面是每个jar包的说明 spring.jar 是包含有完整发布模块的单个jar 包.但是不 ...

  4. 【Spring 数据访问终篇】Spring + Hibernate + Mysql

    说来惭愧,数月没有更新博客,今天带来spring访问数据的最终篇,spring + hibernate. 本篇文章将用maven创建一个简答的java项目,并结合spring框架中的hibernate ...

  5. 安装maven到Eclipse

    http://blog.csdn.net/athena5555/article/details/3115874 14.1. 简介 Eclipse IDE是目前Java开发人群中使用得最广泛的IDE.E ...

  6. spring 各个jar包的功能

    http://bbs.chinaunix.net/thread-1644704-1-1.html spring 依赖jar包: spring.jar 是包含有完整发布模块的单个jar 包.但是不包括m ...

  7. spring-jar包详解整理

    Spring各jar包详解 spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar,aspects.jar, spring-portlet.jar, and sprin ...

  8. Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例 spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock ...

  9. Spring包含JAR的详解

    一.Spring 常用包的说明 spring.jar :  包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and ...

最新文章

  1. javascript实战pdf_javascript该怎么学呢?学习Js之路
  2. 你不可不知的9种Lisp语言思想
  3. Linux之LVM与磁盘配额(quota)详解
  4. python中的format函数_python中的format 函数是什么?如何使用?
  5. 磨刀——python及相关工具
  6. go的25个关键字(保留字)和36个预定标识符
  7. 特斯拉Model 3再次升级,将中控部分功能转移至方向盘按钮
  8. java班长竞选投票_竞选班长采取投票式,引家长不满,班主任:您说该怎么选?...
  9. linux超过cpu负载重启脚本,linux下Web服务器CPU负载超过阀值自动重启脚本
  10. 视频动作检测最新发展调研(Action Detection)
  11. jsf tree组件_JSF表单组件示例教程
  12. 删除后别人的微信号变成wxid_安卓版微信更新了,微信号终于可以修改了?
  13. python vba excel课程_Excel办公自动化—VBA 及编程入门指南
  14. 鲲鹏920服务器支持docker,鲲鹏云服务器上安装Dockerdocker-compose
  15. 告别户外弱网困扰,4G多卡聚合设备增强弱网环境下应急救援信号
  16. 水下SLAM论文!!!
  17. Linux终端不能显示表情符问题
  18. Java系统架构设计
  19. 如何恢复小强中被修改的软件包
  20. 基于Qt/C++的音频转换程序,pcm互转wav,位数转换

热门文章

  1. Java异常面试问题
  2. Java IO: 字节和字符数组
  3. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
  4. Java NIO系列教程(十) Java NIO DatagramChannel
  5. 一张图告诉你什么是系统架构师
  6. 联通培训 老师教的 bootstrap row 里面都是12行不断的分割成小格子
  7. 近5年133个Java面试题 你会几个?
  8. linux下kill指令默认信号,Linux基础命令之kill命令
  9. 官网下载mysql实例数据库
  10. tomcat(7)日志记录器