首页 > 其他分享 >spring和hibernate配置文件整合

spring和hibernate配置文件整合

时间:2023-05-06 18:32:29浏览次数:35  
标签:xml hibernate 配置文件 -- spring com org true


为了操作方便,我们经常在spring整合hibernate的WEB项目中省去了用hibernate.cfg.xml的麻烦,将hibernate的信息直接配置在

Spring配置文件中

下面的都是针对Spring整合Hibernate(注解方式的hibernate)来说的

hibernate.cfg.xml和applicationContext.xml原始配置组合方式:

hibernate.cfg.xml




Xml代码

<SPAN style="FONT-SIZE: large"><?xml version="1.0" encoding="utf-8" ?> 

<!DOCTYPE hibernate-configuration PUBLIC 

 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 

 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 


<hibernate-configuration> 

 <session-factory> 

 <!--


这个只在DBScriptExport.java的new AnnotationConfiguration().configure()或者
new Configuration().configure();这里面由于生成数据库表,或者通过
config.buildSessionFactory都需要用到下面这四行关于数据库的配置.实际项目中,
如果不适用到硬编码做这两件事,而是通过和Spring配合,那么这四行可以不写

--> 

 <!-- 

 <property name="hibernate.current_session_context_class">thread</property> 

 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 

 <property name="connection.url">jdbc:mysql:///test</property> 

 <property name="connection.username">root</property> 

 <property name="connection.password">root</property> 

 --> 

 <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

 <property name="show_sql">true</property> 

 <property name="format_sql">true</property> 

 <!-- mapping类声明--> 

 <mapping class="com.javacrazyer.domain.User" /> 

 </session-factory> 

</hibernate-configuration></SPAN> 


<?xml version="1.0" encoding="utf-8" ?> 

<!DOCTYPE hibernate-configuration PUBLIC 

 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 

 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 


<hibernate-configuration> 

 <session-factory> 

 <!--


这个只在DBScriptExport.java的new AnnotationConfiguration().configure()或者
new Configuration().configure();这里面由于生成数据库表,或者通过
config.buildSessionFactory都需要用到下面这四行关于数据库的配置.实际项目中,
如果不适用到硬编码做这两件事,而是通过和Spring配合,那么这四行可以不写

--> 

 <!-- 

 <property name="hibernate.current_session_context_class">thread</property> 

 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 

 <property name="connection.url">jdbc:mysql:///test</property> 

 <property name="connection.username">root</property> 

 <property name="connection.password">root</property> 

 --> 

 <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

 <property name="show_sql">true</property> 

 <property name="format_sql">true</property> 

 <!-- mapping类声明--> 

 <mapping class="com.javacrazyer.domain.User" /> 

 </session-factory> 

</hibernate-configuration>



上面注释其实也没讲清楚,其实就是如果单独的hibernate项目来说,如果涉及到数据库操的任何操作代码,那么你必须配那段被注

释掉的数据库连接信息,如果是整合Spring的话,那么就不用配置了,Spring提供了对hibernate支持的SessionFactory可以再注入

后获取SESSION,然后你就可以任意去实现数据库操作了

applicationContext.xml


Xml代码

<SPAN style="FONT-SIZE: large"><?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:aop="http://www.springframework.org/schema/aop" 

 xmlns:tx="http://www.springframework.org/schema/tx" 

 xsi:schemaLocation=" 

 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans- 


2.5.xsd 

 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 



 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 


 <!-- 使用C3P0的连接池技术 --> 

 <bean id="dataSource" destroy-method="close" 

 class="com.mchange.v2.c3p0.ComboPooledDataSource"> 

 <property name="driverClass" value="com.mysql.jdbc.Driver" /> 

 <property name="jdbcUrl" value="jdbc:mysql:///test" /> 

 <property name="user" value="root" /> 

 <property name="password" value="root" /> 

 <!-- 指定连接数据库连接池的最大连接数 --> 

 <property name="maxPoolSize" value="20" /> 

 <!-- 指定连接数据库连接池的最小连接数 --> 

 <property name="minPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的初始化连接数 --> 

 <property name="initialPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的连接的最大空闲时间 --> 

 <property name="maxIdleTime" value="20" /> 

 </bean> 

 <bean id="sessionFactory" 

 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

 <!--指定hibernate配置文件的位置--> 

 <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

 <!-- 

 那么这里给sessionFactory注入dataSource的解释:其实就是相当于单独的hibernate项目中使用 

 config.buildSessionFactory()这样手动构建SessionFactory一样,必须提供有关数据库的参数配 

 置信息也就是在hibernate.cfg.xm中 配置的数据库信息,这样使用session才能关联上数据库 

 --> 

 <property name="dataSource" ref="dataSource" /> 

 </bean> 


 <!--如果不配置SessionFactory,配置Spring自带的JdbcTemplate也挺好,然后注入到需要用到的类中去--> 

 <!-- 

 <bean id="jdbcTemplate" 

 class="org.springframework.jdbc.core.JdbcTemplate"> 

 <description>Config jdbcTemplate</description> <property 

 name="dataSource" ref="dataSource" /> </bean> 

 --> 


 <!-- 

 下面是Hibernate的事务管理器 ,如果是单独spring框架的项目中配置spring事务,那么就没有上边 

 的sessionFactory而只会有dataSource,那么下面属性就不是sesionFactory而是DataSource了 

 --> 

 <bean id="transactionManager" 

 class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <!-- 启用注解方式的声明式事务支持 --> 

 <tx:annotation-driven transaction-manager="transactionManager" /> 


 <!-- =============================================== --> 

 <bean id="userDao" class="com.javacrazyer.dao.UserDaoHibernateImpl"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <bean id="sf" class="com.javacrazyer.service.ServiceFacade"> 

 <property name="userDao" ref="userDao" /> 

 </bean> 

</beans></SPAN> 


<?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:aop="http://www.springframework.org/schema/aop" 

 xmlns:tx="http://www.springframework.org/schema/tx" 

 xsi:schemaLocation=" 

 http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 

 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring 


-aop-2.5.xsd 

 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring- 


tx-2.5.xsd"> 


 <!-- 使用C3P0的连接池技术 --> 

 <bean id="dataSource" destroy-method="close" 

 class="com.mchange.v2.c3p0.ComboPooledDataSource"> 

 <property name="driverClass" value="com.mysql.jdbc.Driver" /> 

 <property name="jdbcUrl" value="jdbc:mysql:///test" /> 

 <property name="user" value="root" /> 

 <property name="password" value="root" /> 

 <!-- 指定连接数据库连接池的最大连接数 --> 

 <property name="maxPoolSize" value="20" /> 

 <!-- 指定连接数据库连接池的最小连接数 --> 

 <property name="minPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的初始化连接数 --> 

 <property name="initialPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的连接的最大空闲时间 --> 

 <property name="maxIdleTime" value="20" /> 

 </bean> 

 <bean id="sessionFactory" 

 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

 <!--指定hibernate配置文件的位置--> 

 <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

 <!-- 

 那么这里给sessionFactory注入dataSource的解释:其实就是相当于单独的hibernate项目中使用 

 config.buildSessionFactory()这样手动构建SessionFactory一样,必须提供有关数据库的参数配 

 置信息也就是在hibernate.cfg.xm中 配置的数据库信息,这样使用session才能关联上数据库 

 --> 

 <property name="dataSource" ref="dataSource" /> 

 </bean> 


 <!--如果不配置SessionFactory,配置Spring自带的JdbcTemplate也挺好,然后注入到需要用到的类中去--> 

 <!-- 

 <bean id="jdbcTemplate" 

 class="org.springframework.jdbc.core.JdbcTemplate"> 

 <description>Config jdbcTemplate</description> <property 

 name="dataSource" ref="dataSource" /> </bean> 

 --> 


 <!-- 

 下面是Hibernate的事务管理器 ,如果是单独spring框架的项目中配置spring事务,那么就没有上边 

 的sessionFactory而只会有dataSource,那么下面属性就不是sesionFactory而是DataSource了 

 --> 

 <bean id="transactionManager" 

 class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <!-- 启用注解方式的声明式事务支持 --> 

 <tx:annotation-driven transaction-manager="transactionManager" /> 


 <!-- =============================================== --> 

 <bean id="userDao" class="com.javacrazyer.dao.UserDaoHibernateImpl"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <bean id="sf" class="com.javacrazyer.service.ServiceFacade"> 

 <property name="userDao" ref="userDao" /> 

 </bean> 

</beans>


上面关于SessionFactory注释说过了,如果不需要hibernate有关数据库的操作的话,那么就不要结合hibernate框架而是通过

Spring自带的JdbcTemplate来进行数据库操作


不要hibernate.cfg.xml,将hibernate基本信息配置在applicatonContext.xm中


applicationContext.xml


Xml代码

<SPAN style="FONT-SIZE: large"><?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:aop="http://www.springframework.org/schema/aop" 

 xmlns:tx="http://www.springframework.org/schema/tx" 

 xsi:schemaLocation=" 

 http://www.springframework.org/schema/beans 

 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 

 http://www.springframework.org/schema/aop 

 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 

 http://www.springframework.org/schema/tx 

 http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

 <!-- 使用C3P0的连接池技术 --> 

 <bean id="dataSource" destroy-method="close" 

 class="com.mchange.v2.c3p0.ComboPooledDataSource"> 

 <property name="driverClass" value="com.mysql.jdbc.Driver" /> 

 <property name="jdbcUrl" value="jdbc:mysql:///test" /> 

 <property name="user" value="root" /> 

 <property name="password" value="root" /> 

 <!-- 指定连接数据库连接池的最大连接数 --> 

 <property name="maxPoolSize" value="20" /> 

 <!-- 指定连接数据库连接池的最小连接数 --> 

 <property name="minPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的初始化连接数 --> 

 <property name="initialPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的连接的最大空闲时间 --> 

 <property name="maxIdleTime" value="20" /> 

 </bean> 


 <bean id="sessionFactory" 

 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

 <property name="dataSource"> 

 <ref bean="dataSource" /> 

 </property> 

 <property name="hibernateProperties"> 

 <props> 

 <prop key="dialect"> 

 org.hibernate.dialect.MySQLDialect 

 </prop> 

 <prop key="format_sql">true</prop> 

 <prop key="show_sql">true</prop> 

 <prop key="cache.use_query_cache">true</prop> 

 <prop key="cache.provider_class"> 

 org.hibernate.cache.HashtableCacheProvider 

 </prop> 

 <prop key="cache.provider_class"> 

 org.hibernate.cache.EhCacheProvider 

 </prop> 

 </props> 

 </property> 


 <!-- 针对xml而非注解方式的资源配置方式一 --> 

 <!-- <property name="mappingResources"> <list> 

 <value>com/javacrazyer/domain/user.hbm.xml</value> </list> 

 </property> --> 

 <!-- 针对xml而非注解方式的资源配置方式二 --> 

 <!--<property name="mappingLocations"> <list> <value> 

 classpath:com/javacrazyer/domain/user.hbm.xml </value> </list> 

 </property>--> 


 <property name="annotatedClasses"> 

 <list> 

 <value>com.javacrazyer.domain.User</value> 

 </list> 

 </property> 

 </bean> 



 <!-- 

 下面是Hibernate的事务管理器 ,如果是单独spring框架的项目中配置spring事务,那么就没有上边 

 的sessionFactory而只会有dataSource,那么下面属性就不是sesionFactory而是DataSource了 

 --> 

 <bean id="transactionManager" 

 class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <!-- 启用注解方式的声明式事务支持 --> 

 <tx:annotation-driven transaction-manager="transactionManager" /> 


 <!-- =============================================== --> 

 <bean id="userDao" class="com.javacrazyer.dao.UserDaoHibernateImpl"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <bean id="sf" class="com.javacrazyer.service.ServiceFacade"> 

 <property name="userDao" ref="userDao" /> 

 </bean> 


</beans></SPAN> 


<?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:aop="http://www.springframework.org/schema/aop" 

 xmlns:tx="http://www.springframework.org/schema/tx" 

 xsi:schemaLocation=" 

 http://www.springframework.org/schema/beans 

 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 

 http://www.springframework.org/schema/aop 

 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 

 http://www.springframework.org/schema/tx 

 http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

 <!-- 使用C3P0的连接池技术 --> 

 <bean id="dataSource" destroy-method="close" 

 class="com.mchange.v2.c3p0.ComboPooledDataSource"> 

 <property name="driverClass" value="com.mysql.jdbc.Driver" /> 

 <property name="jdbcUrl" value="jdbc:mysql:///test" /> 

 <property name="user" value="root" /> 

 <property name="password" value="root" /> 

 <!-- 指定连接数据库连接池的最大连接数 --> 

 <property name="maxPoolSize" value="20" /> 

 <!-- 指定连接数据库连接池的最小连接数 --> 

 <property name="minPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的初始化连接数 --> 

 <property name="initialPoolSize" value="1" /> 

 <!-- 指定连接数据库连接池的连接的最大空闲时间 --> 

 <property name="maxIdleTime" value="20" /> 

 </bean> 


 <bean id="sessionFactory" 

 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

 <property name="dataSource"> 

 <ref bean="dataSource" /> 

 </property> 

 <property name="hibernateProperties"> 

 <props> 

 <prop key="dialect"> 

 org.hibernate.dialect.MySQLDialect 

 </prop> 

 <prop key="format_sql">true</prop> 

 <prop key="show_sql">true</prop> 

 <prop key="cache.use_query_cache">true</prop> 

 <prop key="cache.provider_class"> 

 org.hibernate.cache.HashtableCacheProvider 

 </prop> 

 <prop key="cache.provider_class"> 

 org.hibernate.cache.EhCacheProvider 

 </prop> 

 </props> 

 </property> 


 <!-- 针对xml而非注解方式的资源配置方式一 --> 

 <!-- <property name="mappingResources"> <list> 

 <value>com/javacrazyer/domain/user.hbm.xml</value> </list> 

 </property> --> 

 <!-- 针对xml而非注解方式的资源配置方式二 --> 

 <!--<property name="mappingLocations"> <list> <value> 

 classpath:com/javacrazyer/domain/user.hbm.xml </value> </list> 

 </property>--> 


 <property name="annotatedClasses"> 

 <list> 

 <value>com.javacrazyer.domain.User</value> 

 </list> 

 </property> 

 </bean> 



 <!-- 

 下面是Hibernate的事务管理器 ,如果是单独spring框架的项目中配置spring事务,那么就没有上边 

 的sessionFactory而只会有dataSource,那么下面属性就不是sesionFactory而是DataSource了 

 --> 

 <bean id="transactionManager" 

 class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <!-- 启用注解方式的声明式事务支持 --> 

 <tx:annotation-driven transaction-manager="transactionManager" /> 


 <!-- =============================================== --> 

 <bean id="userDao" class="com.javacrazyer.dao.UserDaoHibernateImpl"> 

 <property name="sessionFactory" ref="sessionFactory" /> 

 </bean> 


 <bean id="sf" class="com.javacrazyer.service.ServiceFacade"> 

 <property name="userDao" ref="userDao" /> 

 </bean>


</beans> 注意与第一种方式不同的是applicatonContext.xml中只有sessionFactory发生了变化,数据源依旧注入到里面去,原来

该配置hibernate.cfg.xml文件位置的配置现在换成了,众多行与第一种方式中hibernate.cfg.xml中类似的信息配置。

这样来说呢,更加省事些,当然我指的是SH结合的情况下,如果是hibernate单独的项目,必然用到new

AnnotationConfiguration.config()就必然需要默认查找src下的hibernate.cfg.xml


我自己比较 喜欢用第二种。

标签:xml,hibernate,配置文件,--,spring,com,org,true
From: https://blog.51cto.com/u_7450530/6251030

相关文章

  • 六、分布式SpringCloud环境--谷粒商城
    分布式SpringCloud环境一、注册中心:SpringCloudAlibabaNacos版本:nacos1.1.3链接:https://github.com/alibaba/nacos/releases?page=4主机端使用:(1)、下载zip,并解压,打开bin里的startup.cmd (2)、引入依赖、修改配置文件:导入nacos配置引入依赖<dependency><grou......
  • 【SpringBoot】【六】 刷新上下文
    1 前言上节我们看了上下文的创建和准备,那么我们这节就来看看刷新上下文。2 刷新上下文首先就是我们的run方法,执行刷新上下文  refreshContext(context)://###run方法refreshContext(context);//###SpringApplicationprivatevoidrefreshContext(ConfigurableApp......
  • java filter过滤器 读取配置文件properties的值
    http://www.yayihouse.com/yayishuwu/chapter/29811.获取application.properties的值如userId=1 2.一般实体中采用@Value既可获取@Value("userIdl")privateStringuserId; 但是在filter中,需要用上下文对象来获取filter的生命周期如下:web应用程序启动时,web服务器将创......
  • 【SpringBoot】【五】 创建、准备上下文
    1 前言上节我们看了下环境准备,那么接下来我们就要看重头了,就是创建和准备上下文了。//创建上下文context=createApplicationContext();//加载异常解析报告类exceptionReporters=getSpringFactoriesInstances(SpringBootExceptionReporter.class,newClass[......
  • 【SSH】SSH框架(三)——Spring IOC和AOP的容器框架
    一、前言      在上一篇博客《【SSH】SSH框架(二)——Struts2框架的简单认识》中小编向大家简单的介绍了SSH框架中的第一个S,也就是Struct2。接下来小编将会向大家分享第二个S——Spring。二、Spring是干什么用的?      其实在小编以前做过的项目中也使用过Spring,那个时候......
  • Spring MVC 单元测试
    关键字:SpringMVC单元测试下面一步一步带领大家实现springMVC单元测试:新建一个基类:packagetest;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.junit.BeforeClass;importo......
  • spring3.0 mvc和rest入门例子
    关键字:spring3.0mvc和rest入门例子现在写个简单的小例子出来给初学者学习下。srping3也支持rest,所以例子也包括这部分内容。先看web.xml配置<!--像js,css,gif等静态文件,需要配置为默认的servlet--><servlet-mapping><servlet-name>defaul......
  • spring3.0 mvc rest 注解之@
    关键字:springmvcrest注解之@@RequestMapping@RequestParam@PathVariable@ModelAttributes@SessionAttributes@CookieValue@RequestHeader都是SpringMVCREST中的注释方法,这几种注释方法的用法如下:1#Controller示例URL示例:POST/users/quer......
  • hibernate二级缓存(包括注解方式)
    二级缓存配置(spring+hibernate)说明:本人不建议使用查询缓存,因为查询缓存要求完全相同的查询sql语句才会起作用,所说的查询缓存是针对第二次查询时sql语句与第一次sql语句完全相同那么就可以从缓存中取数据而不去数据库中取数据了,在不启用查询缓存的情况下......
  • spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们......