SpringHibernate3

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

endnote文献顺序编号不对_把Endnote装进大脑:行走的文献管理者

是否还迷失在茫茫的文献海洋&#xff0c;东翻西找&#xff0c;仍无法获得需要的文献信息&#xff1f;是否还在半手动导入参考文献&#xff0c;费时费力&#xff1f;别着急&#xff0c;文献管理神器-Endnote轻松帮你搞定这些问题。把Endnote“装进”大脑&#xff0c;你就能成为行…

Jersey Web Service Hello World Java示例

在Restlet之后&#xff0c; Jersey是另一个流行的开源框架&#xff0c;可以用Java创建RESTful Web服务 。 Jersey符合JAX-RS规范&#xff0c;实际上它是JAX-RS&#xff08;JSR 311&#xff09;&#xff08;http://jsr311.java.net/nonav/releases/1.1/index.html&#xff09;规…

蔡司三坐标_蔡司三坐标测针的安装指南

1、装配和辅助工具合适的辅助工具可以在组装测针组时有效防止各部件的损坏&#xff0c;确保安装的安全进行。下面是几种最重要的装配和辅助工具。2、正确调整MT/VAST吸盘MT/VAST吸盘可以通过顶部的三个螺丝进行旋转调节。必须使用不超过2Nm的扭力紧固&#xff0c;为了防止螺丝的…

三电平igbt死区时间计算_IGBT基础与运用-2

IGBT基础与运用-1尝试去计算IGBT的开启过程&#xff0c;主要是时间和门电阻的散热情况。C.GE 栅极-发射极电容C.CE 集电极-发射极电容C.GC 门级-集电极电容(米勒电容)Cies CGE CGC 输入电容Cres CGC 反向电容Coes CGC CCE 输出电容根据充电的详细过程&#xff0c;可以下图…

在2017年从Maven工件生成P2存储库

几年前&#xff0c;我写了一篇博客文章&#xff0c;介绍如何基于Maven工件生成P2存储库。 如今&#xff0c;这种描述的方法已经过时了&#xff0c;我想展示一种基于p2-maven-plugin的新方法&#xff0c;该方法是为解决该问题而创建的。 Maven构建生命周期中的P2-Maven-Plugin集…

循环次数几次_圆柱模板循环使用次数是多少呢

对于同一处做同样的工程&#xff0c;如果需要使用的是圆柱模板&#xff0c;用户一定考虑到底该进多少货&#xff0c;备多少料(圆柱模板)呢&#xff1f;这就需要考虑到圆柱模板循环使用次数和错开的程度来进行决定的&#xff1f;建筑圆柱模板能周转几次&#xff1f;这可能是所有…

network 拦截不到东西是怎么做到的?_都说读中职院校学不到东西,中职学生到底是怎么学习的?...

中职院校在社会中的影响一直并不是很好&#xff0c;一直都是负面影响高于正面影响&#xff0c;那么&#xff0c;我们不禁就要问了&#xff0c;一直在喊提升中职院校的教学质量&#xff0c;质量提升到哪里去了呢&#xff01;那些中职院校里的学生到底又是怎么学习的呢&#xff1…

数组中查找並返回数组_java数组查找常见情况

一.最简单的查找元素方法&#xff08;依次比较&#xff09;&#xff1a;给一个数组&#xff0c;在数组里面查找某个元素在数组中的位置&#xff0c;并返回它的位置。public static void main(String[] args) {int arr[] new int[]{12, 4, 54, 57, 87, 3, 41, 1, 3, 4, 1, 3, 4…

阿帕奇跨域_阿帕奇骆驼遇见Redis

阿帕奇跨域键值商店的兰博基尼 Camel是最好的面包集成框架&#xff0c;在本文中&#xff0c;我将向您展示如何通过利用另一个出色的项目Redis使它更加强大。 Camel 2.11即将发布&#xff0c;具有许多新功能&#xff0c;错误修复和组件。 这些新组件中的几个是我创作的&#…

误码率越高越好还是越低越好_ISO永远都是越低越好?不一定!这些情况下要用高 ISO!...

关于摄影中的参数&#xff0c;在说到 ISO(感光度)的时候&#xff0c;大家脑海中肯定都会想到那句摄影中的定律——“使用尽可能低的 ISO ”&#xff0c;这是为什么呢&#xff1f;通过下面这张典型的高 ISO 照片我们能知道原因在图片里&#xff0c;那些不自然的、充斥整个画面的…

如何在Java 8中创建线程安全的ConcurrentHashSet?

在JDK 8之前&#xff0c;还没有办法在Java中创建大型的线程安全的ConcurrentHashSet。 java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类&#xff0c;但是从JDK 8开始&#xff0c;您可以使用新添加的keySet&#xff08;默认值&#xff09;和newKeySet&#xff08;…

rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国

导读&#xff1a;你可以尝试以多种语言编程一个简单的游戏来开始编程之路。本文字数&#xff1a;4068&#xff0c;阅读时长大约&#xff1a; 5分钟https://linux.cn/article-12979-1.html作者&#xff1a;Moshe Zadka译者&#xff1a;Xingyu.Wang当你想学习一门新的编程语言时&…

python神经网络教程16_Python深度学习之神经网络视频

Python深度学习之神经网络视频课程简介该阶段是深度学习的入门课程&#xff0c;主要介绍经典的深度学习框架TensorFlow的使用&#xff0c;IO操作&#xff0c;以及神经网络基础、卷积神经网络的相关知识&#xff0c;并用卷积神经网络原理搭建、设计自己的网络&#xff0c;实现对…

apache camel_REST与Apache Camel

apache camel有许多方法可以在Camel中公开HTTP终结点&#xff1a;jetty&#xff0c;tomcat&#xff0c;servlet&#xff0c;cxfrs和restlet。 其中的两个组件– cxfrs和restlet也仅需几行代码即可支持REST语义。 这个简单的示例演示了如何使用camel-restlet和camel-jdbc进行CRU…

删除 多个表_合并汇总多个工作簿多个工作表,删除修改新增更新内容只需刷新...

要求&#xff1a;1、把多个工作簿的多个工作表内容合并汇总2、后续在任一工作表内删除修改新增内容&#xff0c;无需再重新做表3、后续在任一工作簿中新增一个或多个工作表&#xff0c;无需再重新做表4、后续在文件夹中添加一个或多个Excel工作簿文件&#xff0c;无需再重新做表…

OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章&#xff1a; 不要太相信我要说的话。 我之所以这样说&#xff0c;是因为我们正在讨论安全性。 而且&#xff0c; 当您谈论安全性时&#xff0c;除了100&#xff05;正确的陈述外&#xff0c;还有冒任何其他风险的风险…

go语言查询某个值是否在数组中_go语言中的数组

package main;import ("fmt")func main() {//声明一个数组var a [3]int;a [3]int{1, 2, 3};//声明并赋值var b [3]int [3]int{1, 2, 3};//声明并赋值(省略类型)var c [3]int{1, 2, 3};//声明并赋值简写d : [3]int{1, 2, 3};//GO中将数组长度作为数组类型的一部分/…

ssm集成笔记_SSM整合笔记

SSM一般是分开学的&#xff0c;Spring&#xff0c;SpringMVC&#xff0c;Mybatis。学完之后整合也是需要学习一段时间。下面是一次整合的实践...SSM的整合顺序一般先整合Spring和Mybatis。再整合SpringMVC。Spring整合Mybatis首先把文件放到lib的文件夹下。然后在src目录下新建…

人工智能在建筑运营_打造智能建筑商

人工智能在建筑运营构建API时&#xff0c;您应始终考虑谁将使用它。 当API简单易用时&#xff0c;用户就会感到满意。 当用户满意时&#xff0c;每个人也都会满意。 但是出色的可用性并非总是容易实现的。 有一些模式对此有所帮助&#xff0c;在这篇文章中&#xff0c;我将重点…

mysql删除用户账号和密码_mysql添加、删除用户和授权用户

MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):1.新建用户1.1 登录MYSQL&#xff1a;>mysql -u root -p>密码1.2 创建用户&#xff1a;mysql> insert into mysql.user(Host,User,Password) values("localhos…