spring 整合hibernate

Spring非常的强大,为我们整合了一些常用的ORM框架,比如hibernate,ibatis等,那么为什么要进行整合呢?

我想应该是Spring的IOC容器能更好的管理SessionFactory,还有就是Spring的事务管理(个人感觉).

整合步骤

1. jar包的下载

 这里我采用的是spring 3.0.5和hibernate 3.6 final 版本进行整合,当然也可以使用其他的版本,但是Spring2.5+版本支持Hibernate 3.1+版本,不支持低版本,下载的话可以直接去官网进行下载

2.配置

  a.定义实体model类,因DB中只有user一张表,所以定义UserModel

 

package com.jacksoft.spring.hibernate.model;

public class UserModel {

	private Integer id;
	
	private String username;
	
	private String password;
	
	private Integer levelCode;

//  省略setter和getter
	
}

   也就是我们经常使用的java bean类型

 

  b.然后定义UserModel对象和数据库之间的映射关系user.hbm.xml

    

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- 将表和实体model映射 -->
<hibernate-mapping>
	<class name="com.jacksoft.spring.hibernate.model.UserModel" table="user">
		<id name="id" column="id">
			<generator class="native" />
		</id>
		<property name="username" column="username" />
		<property name="password" column="password"/>
		<property name="levelCode" column="levelCode"/>
	</class>
</hibernate-mapping>

 也就是将表和model关联起来,将model中的字段与表中的字段关联起来,包括一些属性等

 

  c.配置bean和数据源

    这里使用org.springframework.orm.hibernate3.LocalSessionFactoryBean来产生sessionFactory对    象,该Bean用于支持XML映射的读取(AnnotationSessionFactoryBean是基于注解风格),主要有如下属性:

configLocations:用来定义hibernate的配置文件,如:classpath:hibernate.cfg.xml

mappingLocations:用来指定hibernate的映射文件,如:user.hbm.xml

hibernateProperties:hibernate属性定义

dataSource:指定数据源

注意:dataSource和hibernateProperties两个属性配置就已经等同于configLocations配置,所以不要配置两次,会造成重复。

定义springConfig.xml文件如下:

 

<?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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
						http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
						http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
						http://www.springframework.org/schema/aop
						http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">


	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:resource.properties</value>
			</list>
		</property>
	</bean>

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
	destroy-method="close">
		<property name="driverClassName" value="${driverClass}" />
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
	</bean>
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<!-- 定义mapping 文件 -->
		<property name="mappingResources">
			<list>
				<value>user.hbm.xml</value>
			</list>
		</property>
		<!-- 定义hibernate配置文件,从源码来看  该属性为properties -->
		<property name="hibernateProperties">
			<props>
				<!-- 配置方言为MYSQL -->
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
				<!-- 是否显示语句 -->
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
	</bean>
</beans>

3. 测试

 

 这里采用JUNIT框架来进行测试,SpringHibernateTest如下:

 

package com.jacksoft.spring.hibernate;

import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 *  测试获取session
 * @author Jack
 *
 */
public class SpringHibernateTest {

	private static SessionFactory sessionFactory;
	
	@BeforeClass
	public static void initSessionFactory(){
		ApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml");
		sessionFactory = context.getBean("sessionFactory", SessionFactory.class);
	}
	
	@Test
	public void testCreateTable(){
		String sql = "create table hibernate (id int(10) not null AUTO_INCREMENT,name varchar(100),PRIMARY KEY(id))";
		SQLQuery query = sessionFactory.openSession().createSQLQuery(sql);
		query.executeUpdate();
		System.out.println(query.getQueryString());
	}
	
	@Test
	public void testDropTable(){
		String sql = "drop table hibernate";
		sessionFactory.openSession().createSQLQuery(sql).executeUpdate();
	}
}

 

通过Spring IOC来获取sessionFactory对象,然后再获取session来操作

以上就完成了基本的整合过程

 

 对应导入的jar文件:(可能有多余的,方便以后使用)



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值