Spring休眠3

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/368842.shtml

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

相关文章

我们十组的cantool装置的使用

十组的cantool装置的使用 下图是连接好的示意图&#xff0c;灯亮。 如果在串口关闭的时候输入C&#xff0c;cantool装置就会报错&#xff0c;因为串口是关闭的。正如需求文档里写的&#xff0c;当串口关闭&#xff0c;输入C要有返回\BEL的,关闭串口的前提是串口打开。 正确发送…

php查询功能突然没有用,php – 为什么搜索查询没有在PHRETS中显示任何结果?

我正在使用这个PHP脚本从一个简单的搜索查询获得结果here我已经下载了属性here的元数据excel文件$rets_login_url "http://sef.rets.interealty.com/Login.asmx/Login";$rets_username "xxxxxxxx";$rets_password "xxxxxxxx";$rets_user_agen…

es6入门

现在我们来学习一下es6,它现在是一门比较火的语言但是并不是所有的浏览器都兼容E6说的全部特性&#xff0c; 但是我们依旧应该学习一下ES6的语法。 因为兼容性我们得学习一下Babel,它是一个广泛使用的ES6转换器&#xff0c;可以将ES6代码转化为ES5代码&#xff0c;从而在现有环…

2018-05-05(在小程序中使用图标)

项目中常常需要使用到字体图标&#xff0c;微信小程序中使用字体图标与在平常的web前端中类似但是又有区别。下面以使用阿里图标为例子讲解如何在微信小程序中使用字体图标。 第一步&#xff1a;下载需要的字体图标 进入阿里图标官网http://iconfont.cn/搜索自己想要的图标&…

Spring休眠4

1.概述 本文将重点介绍如何使用Spring设置Hibernate 4 –我们将研究如何使用Java和XML配置来使用Hibernate 4配置Spring 3。 当然&#xff0c;该过程的某些部分对于Hibernate 3文章是通用的 。 2. Maven 要将Spring Persistence依赖项添加到项目pom.xml中 &#xff0c;请参阅专…

php 水平测试,测试您的 PHP 水平的题目_PHP教程

在 Unix Review 上看到这个很有意思的测试&#xff0c;和大家共享。UnixReview.comMay 2007Test Your Knowledge of PHPby Emmett DulaneyFrom: http://www.unixreview.com/documents/s10130/ur0705d/Increasingly, PHP seems to be the tool/language that is used to make We…

Django的模板系统

一、模板的组成 html代码和逻辑控制代码 二、逻辑控制代码的形式 1、变量&#xff08;使用双大括号引用变量&#xff09; a、template和context 语法 : {{ var_name }} 模板系统不仅可以传字符串&#xff0c;它可以传递任意对象&#xff0c;对于向列表、字典、元组等对象&…

Java SE 7 Update 25 –发行说明进行了解释。

昨天是CPU日。 Oracle通过6月的Java重要补丁更新发布了Java SE更新25 。 在4月的最后一次重大更新之后&#xff0c;这是与所有其他Oracle产品一起不符合Oracle关键补丁更新计划的最后一个更新。 从2013年10月开始 &#xff0c;Java安全修补程序将遵循四个年度安全发布周期。 但…

springmvc mybatis 做分页sql 语句

<?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"ssmy.dao.UserDao"> <res…

LeetCode Subarray Product Less Than K

原题链接在这里&#xff1a;https://leetcode.com/problems/subarray-product-less-than-k/description/ 题目&#xff1a; Your are given an array of positive integers nums. Count and print the number of (contiguous) subarrays where the product of all the elements…

Ansible: hosts文件拆分为inventory和定义inventory全局变量

前言 随着管理机器的增多&#xff0c;我们在使用Ansible的时候时常会遇到hosts文件过于冗长的问题&#xff0c;极其不便于管理&#xff0c;而将hosts文件拆分为inventory就可解决该问题&#xff1b;另外&#xff0c;hosts中的每个主机条目需要指定用户名和私钥或密码&#xff0…

gulp实用配置(1)——demo

在React和Vue推进下&#xff0c;现在很多人都在使用webpack作为自动化构建工具&#xff0c;但其实在很多时候我们并不是一定需要用到它&#xff0c;gulp这样的轻量级构建工具就足够了。 最近一段时间不是太忙&#xff0c;所以就写了三份配置&#xff0c;用在不同的情况下。 这…

使用Maven运行Solr

使用Maven运行Solr Solr是一个开放源代码搜索服务器&#xff0c;它是使用Lucene Core的索引和搜索功能构建的&#xff0c;它可以用于使用几乎任何编程语言来实现可扩展的搜索引擎。 尽管Solr具有许多优点&#xff0c;但建立一个开发环境并不是其中之一。 该博客文章描述了如何…

oracle11g日志原理,oracle11gRAC之log日志体系

oracle11gRAC之log日志体系&#xff1a;1、CRS日志(grid)&#xff1a;首选查看alertlog&#xff1a;$CRS_HOME/grid/log/hostname/alertdbserver1.logClusterware后台进程日志&#xff1a;crsd.Log: $ORA_CRS_HOME/grid/log/hostname/crsd/crsd.Logocssd.Log: $ORA_CRS_HOME/gr…

Eclipse中 如何实现 多行同时编辑

在编辑的时候按下 SHIFT ALT A 之后 鼠标变为 号 选择要同时编辑几行 即可编辑&#xff08;现在eclipse好像只能是编辑一块地方 不能像vs那样 任何地方可以同时编辑 这点很鸡肋&#xff09; 如图 退出编辑 再次 按 SHIFT ALT A 即可 转载于:https://www.cnblogs.com…

AFN\HTTPS\UIWebView

1.AFN使用技巧 1.在开发的时候可以创建一个工具类&#xff0c;继承自我们的AFN中的请求管理者&#xff0c;再控制器中真正发请求的代码使用自己封装的工具类。 2.这样做的优点是以后如果修改了底层依赖的框架&#xff0c;那么我们修改这个工具类就可以了&#xff0c;而不用再一…

检测和删除多余无用的css

本文主要讲解如何检测页面中多余无用的css。 1、chrome浏览器 F12审查元素的Audits 说明&#xff1a;使用Audits&#xff0c;会检测出页面中没有用到的css&#xff0c;需要手动删除多余的css&#xff1b;同时需要说明的是检测出多余无用的css块&#xff0c;而不是某一行css。 …

JDK 8的Calendar.Builder

勇敢的Java新世界的定义特征之一是Java空间中构建器模式的日益普及。 Groovy似乎是JVM上最流行的替代语言&#xff08;对于Java&#xff09;&#xff0c;以在核心库以及Groovy支持的库和框架中大量使用Builder而闻名。 乔希布洛赫与覆盖带来的图案为Java开发者社区心态前列模式…

oracle锁表会话超时时间,ORACLE快速彻底Kill掉的会话,防止锁表

ORACLE快速彻底Kill掉的会话,防止锁表2020-05-30编程之家收集整理的这篇文章主要介绍了ORACLE快速彻底Kill掉的会话,防止锁表&#xff0c;编程之家小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。万能是sql重启服务&#xff0c;不然&#xff0c;以下…

格式化文本

1.后台获取文本后文本内部存在回车&#xff0c;但是浏览器不能编译\n\t所以使用pre,使文本能够编译文本&#xff0c;2.若文本长度超出预设宽度&#xff0c;可以添加样式&#xff0c;下列代码&#xff0c;可以使超出后的文本自动换行。/*将文本解析为段落,是段落自动化行*/pre {…