`
healthandbeauty
  • 浏览: 168095 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

spring and hibernate perfect Integration

阅读更多
搞了一天的这东东。发现spring这东西真是个好东东。废话少说直奔主题
首先要给spring弄个数据源
我把数据源配置文件放到了jdbc.properties文件了。
如下:
## MySQL

hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql:///shtest
hibernate.connection.username root
hibernate.connection.password 123


## Oracle

#hibernate.dialect org.hibernate.dialect.OracleDialect
#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
#hibernate.connection.username ora
#hibernate.connection.password ora
#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:orcl
#hibernate.connection.url jdbc:oracle:thin:@localhost:1522:XE


## DB2

#hibernate.dialect org.hibernate.dialect.DB2Dialect
#hibernate.connection.driver_class com.ibm.db2.jcc.DB2Driver
#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
#hibernate.connection.url jdbc:db2://localhost:50000/somename
#hibernate.connection.url jdbc:db2:somename
#hibernate.connection.username db2
#hibernate.connection.password db2


其次建立一个spring 的applicationContext.xml文件 里面有propertyConfigurerbean、dataSource bean 、
sessionFactory bean、一会一一对这几个bean进行介绍。
<?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"
	  xmlns:seam="http://jboss.com/products/seam/spring-seam"
	  xsi:schemaLocation="http://www.springframework.org/schema/beans 
	                      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	                      http://www.springframework.org/schema/context 
						  http://www.springframework.org/schema/context/spring-context-2.5.xsd"					  
	  default-autowire="byName">

	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:resoureces/jdbc.properties</value>
			</list>
		</property>
	</bean>
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"  >
		<property name="url" value="${hibernate.connection.url}"/>
		<property name="username" value="${hibernate.connection.username}"/>
		<property name="password" value="${hibernate.connection.password}"/>
		<property name="driverClassName" value="${hibernate.connection.driver_class}"/>
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocations">
			<list>
				<value>classpath:resoureces/hibernate.cfg.xml</value>
				<value>classpath:resoureces/business.cfg.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					${hibernate.dialect}
				</prop>
			</props>
		</property>
	</bean>
	
	
	<bean id="transactionManager"  
          class="org.springframework.orm.hibernate3.HibernateTransactionManager"></bean>
	
	<!-- 事务关注点 -->
 	<bean id="transactionAdvisor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
		<property name="transactionAttributes"> 
			<props> 
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="validate*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="validator*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
			</props> 
		</property> 
	</bean>
	
	
	<bean id="userDao"
		class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces"
			value="com.test.dao.UserDao" />
		<property name="target">
			<bean
				class="com.test.dao.UserDaoImpl" />
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionAdvisor</value>
			</list>
		</property>
	</bean>
	
	
</beans>


首先来看propertyConfigurer bean。org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
其是用来读取*.properties文件用的spring类 extends PropertyResourceConfigurer implements BeanNameAware, BeanFactoryAware
这是个使用用户和spring容器打交道的一个类。为什么要有这么bean呢?
答:它是为dataSource bean服务的。因为dataSource bean里面的属性值(<property name="url" value="${hibernate.connection.url}"/>)是用的spring的容器里面的propertyConfigurer bean里面取的值

紧接着咱们来看:sessionFactory bean 用org.springframework.orm.hibernate3.LocalSessionFactoryBean可以创建hibernate的sessionFactory 了。

再看它有这么一个<property name="configLocations"> 属性 它有这么个
<list>
 <value>classpath:resoureces/hibernate.cfg.xml</value>
 <value>classpath:resoureces/business.cfg.xml</value>
</list>
list值 。这个属性就可以把咱hibernate的东西整合到这里来了。

来看它整合的hibernate的那些东西hibernate.cfg.xml.这个文件内容如下:
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<!-- Enable Hibernate's automatic session context management -->
		<property name="current_session_context_class">thread</property>

		<!-- SQL logging configuration -->
		<!-- NOTE: to show sql, use DEBUG log level for org.hibernate.SQL category -->
		
		<property name="show_sql">true</property>
		
		<property name="format_sql">true</property>
		<property name="use_sql_comments">false</property>
		<property name="generate_statistics">false</property>
		
		<!-- Query configuration -->
		<property name="hibernate.query.substitutions">true 1, false 0</property>
		<property name="hibernate.max_fetch_depth">2</property>

		<!-- Batch configuration -->
		<property name="hibernate.default_batch_fetch_size">8</property>
		<property name="hibernate.jdbc.batch_size">20</property>

		<!-- Cache configuration -->
		<property name="hibernate.cache.use_second_level_cache">true</property>
		<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>	
		<property name="hibernate.cache.use_query_cache">true</property>
	</session-factory>
</hibernate-configuration>

business.cfg.xml 这个文件内容如下:
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<mapping resource="com/test/domain/user.hbm.xml"/>
	</session-factory>
</hibernate-configuration>


我们可以把hibernate的配置文件分开写,引用一句小沈阳的话“为什么呢?”o(∩_∩)o...因为让它的颗度更细。当再添加其他文件配置文件的时候不至于引发其他的问题。

这个transactionAdvisor bean是spring的事务aop 。
它有一个属性 是transactionManager 所以我们还得弄个transactionManager bean。这个bean需要 sessionFactory。。不用担心spring的default-autowire属性给我们解决了手动诸如的问题。


生成库表

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping  package="com.test.domain">
	<class name="User" table="USER" >
		<id name="id" type="java.lang.String">
			<generator class="uuid"/>
		</id>
		<property name="name" 
				not-null="true"
				length="15"
				column="NAME_"/>
		<property name="age" column="AGE_" length="15"/>
	</class>
	
</hibernate-mapping>


package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.util.ConfigHelper;

public class hbmtoddl {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Configuration configuration = new Configuration();
		configuration.configure("/resoureces/hibernate.cfg.xml");
		configuration.configure("/resoureces/business.cfg.xml");
		
		Properties properties = new Properties();
		InputStream stream = ConfigHelper.getResourceAsStream("/resoureces/jdbc.properties");
		try {
			properties.load(stream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		configuration.setProperties(properties);
		new SchemaExport(configuration).create(true, true);
	}

}



基本上整合完了是不是该dao一下下了。
<bean id="userDao"
		class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces"
			value="com.test.dao.UserDao" />
		<property name="target">
			<bean
				class="com.test.dao.UserDaoImpl" />
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionAdvisor</value>
			</list>
		</property>
	</bean>

package com.test.dao;

import com.test.domain.User;

public interface UserDao {

	public void addUser(User user);
}

package com.test.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.test.domain.User;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao{

	public void addUser(User user) {
		// TODO Auto-generated method stub
		getHibernateTemplate().save(user);
	}
	
}


测试类UserTest
package com.junit;


import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.testng.annotations.Test;

import com.test.dao.UserDao;
import com.test.domain.User;

public class UserTest extends TestCase{

	@Test
	public void test(){
		System.out.print("bean is ............:::");
		ApplicationContext context= new ClassPathXmlApplicationContext(
				new String[]{"/resoureces/testApplicationContext.xml"});
		System.out.print("bean is ............:::"+context.getBean("userDao"));
		UserDao userDao = (UserDao)context.getBean("userDao");
		User user = new User();
		user.setAge("44444444");
		user.setName("额份额为发送");
		userDao.addUser(user);
	}
	
}





啰啰嗦嗦写弄完了。我的妈呀。。把我给累死了。那有啥问题希望大家共同讨论。有啥不合适的地方请大伙指正。that's it for taday.
分享到:
评论

相关推荐

    Spring3.2.5Hibernate4.0.1Integration 完整範例

    标题 "Spring3.2.5Hibernate4.0.1Integration 完整範例" 指的是将 Spring 3.2.5 版本与 Hibernate 4.0.1 版本整合的一个实例项目。这个项目可能是为了演示如何在实际应用中有效地结合这两个框架,以便于更高效地管理...

    Spring与Hibernate集成

    **Spring与Hibernate集成详解** 在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全方位的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种服务管理功能。而...

    spring-hibernate.jar

    spring-hibernate.jar

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    spring mvc + spring + hibernate 全注解整合开发视频教程 11

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...

    gwt+spring+hibernate

    标题 "gwt+spring+hibernate" 涉及的是一个使用Google Web Toolkit (GWT)、Spring框架和Hibernate ORM技术的集成示例。这是一个常见的Web应用开发组合,用于构建高效、可扩展且功能丰富的Java web应用程序。下面将...

    jsp+Spring+hibernate 博客系统

    在本文中,我们将深入探讨一个采用JSP、Spring和Hibernate技术构建的博客系统。这种组合提供了强大的功能,包括后端业务逻辑管理、持久层支持以及用户友好的前端界面。 **JSP (JavaServer Pages)** JSP是Java的一...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第12部分,将帮助开发者掌握如何在Java Web项目中高效地集成这三个核心框架,实现松耦合、可...

    Spring+hibernate整合源代码

    Spring 和 Hibernate 是两个非常重要的 Java 开发框架,它们在企业级应用开发中有着广泛的应用。Spring 是一个全面的后端应用程序框架,提供了依赖注入、面向切面编程、数据访问、事务管理等多种功能。Hibernate 则...

    非注解Springmvc+spring+hibernate 入门实例

    SpringMVC作为Spring的一部分,专门用于处理Web层的请求,而Hibernate则是一个强大的对象关系映射(ORM)框架,简化了数据库操作。下面我们将深入探讨"非注解SpringMVC+Spring+Hibernate入门实例"中的关键知识点。 ...

    spring-hibernate 4个版本

    标题中的“spring-hibernate 4个版本”指的是四个不同阶段的Spring与Hibernate集成框架的版本。Spring是一个广泛使用的Java企业级应用开发框架,而Hibernate是一个流行的持久化框架,用于简化数据库操作。这两个库的...

    spring+hibernate整合demo

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别在应用层管理和持久化层处理数据。Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及大量的集成...

    struts,spring,hibernate是什么.txt

    struts,spring,hibernate是什么.txtstruts,spring,hibernate是什么.txtstruts,spring,hibernate是什么.txtstruts,spring,hibernate是什么.txtstruts,spring,hibernate是什么.txtstruts,spring,hibernate是什么....

    spring-hibernate3.jar.zip

    《Spring与Hibernate集成详解》 在Java开发领域,Spring框架和Hibernate ORM工具是两个非常重要的组件,它们分别处理了应用程序的依赖注入(DI)和对象关系映射(ORM)。Spring作为一个全面的轻量级框架,提供了...

    Spring与Hibernate整合

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于应用的依赖注入(DI)和对象关系映射(ORM)。SSH整合,即Struts、Spring和Hibernate的集成,是Java Web开发中常见的一种技术栈,它能有效地解决...

    spring mvc + spring + hibernate 全注解整合开发视频教程 06.haozip03

    spring mvc + spring + hibernate 全注解整合开发视频教程 06.haozip03

    struts-spring-hibernate-_-integration-2.zip

    struts-spring-hibernate-_-integration-2.zip

    JavaEE源代码 spring-hibernate3

    JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-...

    memcache也spring,hibernate的配置

    标题中的“memcache也spring,hibernate的配置”指的是如何在Java开发环境中,结合Memcached缓存系统、Spring框架和Hibernate持久化框架进行集成配置。Memcached是一种高性能的分布式内存对象缓存系统,用于加速动态...

    spring和hibernate框架

    Spring 和 Hibernate 是两个非常重要的 Java 开发框架,它们在企业级应用开发中占据了核心地位。Spring 是一个全面的后端应用程序框架,而 Hibernate 则是一个流行的对象关系映射(ORM)工具,它使得 Java 开发人员...

Global site tag (gtag.js) - Google Analytics