Spring和Hibernate的整合关键就是要将Hibernate的sessionFactory交给Spring来管理。另外一个就是配置数据源。下面来讲如何配置数据源:
数据源可以采用一些开源的数据源,如DBCP,c3p0等。也可以采用JNDI数据源,即容器提供的数据源。下面就讲解DBCP的配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=Libo"></property>
<property name="username" value="sa"></property>
<property name="password" value=""></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="1000"></property>
</bean>
配置上面的数据源需要引入DBCP的jar包commons-dbcp.jar。它里边有一个类BasicDataSource,它提供了主要数据源配置属性所应有的getter和setter方法,所以我们才能像上面那样配置。当然,可以配置的属性远远超过我上面配的,如果需要配置其他的属性,可以直接到BasicDataSource类里面找到。
配置JNDI数据源就相对较简单一些。JNDI数据源一般在容器中已经配置好了,在spring中只不过是引用罢了。
那么如何在容器中配置JNDI数据源呢?下面就以tomcat6为例讲解,tomcat5的方法稍有不同。
首先,在tomcat的目录下找到一个conf目录,里面有一个文件context.xml,用于配置tomcat启动上下文。现在在里面加上一段话:
<Resource
name="jdbc/test" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;databaseName=charge"
username="sa" password=""
maxActive="30" maxIdle="10" maxWait="-1"/>
将这段话放到</context>标签之前就行。当然,里边的参数可以根据具体的情况设定。配置好了之后我们还需要在web.xml文件中加上一段
<resource-ref>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
这里的res-ref-name的值就是context.xml文件中配置的那个名字。这样就配置好了一个JNDI数据源,在程序中我们可以轻松的获得到这个数据源:
Context context = new InitialContext();
DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/test");
这其中参数java:comp/env/jdbc/test 中java:comp/env/是固定的写法,后面才是JNDI的名字。一旦配置了这样的数据源将使我们获取connection变得异常的简单。
然而在spring中如何去引用这个数据源呢?首先spring去获得这个数据源的目的是为了将dataSource注入给类org.springframework.orm.hibernate3.LocalSessionFactoryBean,该类会负责创建sessionFactory,即Hibernate的session工厂。所以让spring管理数据源的真正目的是为了管理sessionFactory。spring引用JNDI数据源的方法为:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
lazy-init="false">
<property name="jndiName" value="java:comp/env/jdbc/test"></property>
</bean>
这看起来比配置DBCP的数据源要简单多了,其实最终它的底层也是DBCP实现的,它是apache的一个开源项目。
OK!数据源已经有了,下一步就是如何产生Hibernate所需的sessionfactory了。下面贴出一个简单的代码:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
depends-on="dataSource" lazy-init="false">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list><value>en/bean/user.hbm.xml</value></list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
我们注意到,这里边注入了一个dataSource,这个datasource就是我们刚才创建的那个。另外一个就是引入hibernate的实体类映射文件,所有的映射文件都包含在mappingResources下面。然后就是配置hibernate的相关属性,以properties文件的键值对样式配置,包含在<props></props>之间。这样我们就完全可以省略hibernate自身的配置文件hibernate.cfg.xml了。
这样就真的OK了,我们只需要在需要用到sessionfactory的地方给他注入就行了。由于用Hibernate访问数据库经常会用到一个类HibernateTemplate。当我们实例化改类的时候,需要给他传入一个sessionfactory的实例。这时我们就可以利用spring给我们去注入这个值。
附录:
Spring整合Hibernate必须jar包:
不要认为asm.jar、commons-collections.jar、dom4j.jar、jta.jar这几个包不重要,没有他Spring启动不了。
分享到:
相关推荐
spring4和hibernate4整合,经过测试没有问题。可以直接在上面进行开发
spring和hibernate整合示例,以一张表的业务操作,来简要说明hibernate和spring的整合,说明spring对HibernateTemplate和调用
Spring与hibernate 整合 简单示例 Spring与hibernate 整合 简单示例
Spring 和Hibernate整合开发的笔记文档和使用的jar包
JavaEE spring和Hibernate整合(没有hibernate.cfg.xml)
struts2和spring和Hibernate的整合包,在MyEclipse中自动导入老是有冲突包。
JavaEE spring和Hibernate整合(有hibernate.cfg.xml)
spring和hibernate整合的优化配置.txt
struts2和spring和hibernate整合所需包集合.rar
Spring+hibernate整合源代码 结束Sping+hibernate 的使用方法 包括演示示例
Spring与Hibernate整合小例子
struts、spring和hibernate整合所需要的常用的包.
spring-Hibernate整合代码测试过程
spring_hibernate整合实例 spring_hibernate整合实例
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java ...
spring与hibernate的整合 spring事务的配置
spring hibernate整合jar包齐全
struts+spring+hibernate整合