`
xiaoliang330
  • 浏览: 116026 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring 与Hibernate集成的配置

阅读更多
首先建个web项目,导入所需要的包,包名在这列出:
hibernate3.3所用到的jar包:
antlr-2.7.6.jar                   开源语法分析生成器(lib\required)
commons-collections-3.1.jar       Commons集合类库,与连接池有关(lib\required)
dom4j-1.6.1.jar                   xml解析类库(lib\required)
javassist-3.9.0.GA.jar            分析,编辑和创建java字节码类库(lib\required)
jta-1.1.jar                       事务处理api   (lib\required)        
slf4j-api-1.5.8.jar               日志处理 (lib\required)-->用log4j实现
hibernate3.jar                    核心
ehcache-1.2.3.jar                 二级缓存(lib\optional\ehcache)
Spring2.5安装包所用的jar包:
dist\spring.jar
lib\aspectj\aspectjweaver.jar、aspectjrt.jar
lib\cglib\cgligb-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\jakarta-commons\commons-logging.jar 、commons-dbcp.jar、commons-pool.jar
lib\log4j\log4j-1.2.15.jar   供srping与hibernate使用的日志记录jar包
lib\slf4j\ slf4j-log4j12-1.5.0.jar  日志转换jar包,实现把log4j.jar包适配到slf4j标准。


当然你可以根据自己的需要导入其他的包,这个也不一定是什么标准,看需要来配。


然后建个POJO:
package com.xll.bean;

public class User {
	private String name;
	private Integer id;
	
// getter & setter 
}


这里我没使用hibernate 注解,所以手动创建相应的.hbm.xml文件

<?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>
	<class name="com.xll.bean.User">
		<id name="id">
			<generator class="increment"></generator>
		</id>
		<property name="name" />	
	</class>	         
</hibernate-mapping>



然后建立相应的service及实现类:
package com.xll.service;

import java.util.List;
import com.xll.bean.User;

public interface UserService {
	public void save(User user);
	public void delete(Integer id);
	public void update(User user);
	public User getUser(Integer id);
	public List<User> getUsers();
}




实现类:
package com.xll.service.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.xll.bean.User;
import com.xll.service.UserService;

public class UserServiceBean implements UserService{
	 private HibernateTemplate hibernateTemplate;

	    public void setSessionFactory(SessionFactory sessionFactory) {
	        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
	    }
	public void save(User user) {
		hibernateTemplate.save(user);
	}
	public void delete(Integer id) {
		
	}
	public User getUser(Integer id) {
		return null;
	}
	public List<User> getUsers() {
		return null;
	}
	public void update(User user) {
		
	}

}


这里我先只实现一个方法,跑起来再说。

然后在spring的主配置文件中进行配置了,这里我采用的是将Hibernate的sessionfactory注入到服务层实现类当中,初始化spring提供的HibernateTemplate

主配置如下:
<?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">
		
		
	<!-- 配置数据源 -->	
	    <bean id="theDataSource"  
        class="org.apache.commons.dbcp.BasicDataSource">   
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />   
            <property name="url" value="jdbc:mysql://localhost:3306/ssh" />   
            <property name="username" value="root" />   
            <property name="password" value="123" />   
            <property name="initialSize" value="2" />   
            <property name="maxActive" value="100" />   
            <property name="maxIdle" value="2" />   
            <property name="minIdle" value="1" />   
    </bean>
    
  	<!-- 事务管理-->   
        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   
            <property name="dataSource" ref="theDataSource" />   
        </bean>    
        
    <!-- 开启事务注解   -->     
    <tx:annotation-driven transaction-manager="txManager" />  
    
  	<!-- Hibernate SessionFactory -->      
  <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   			<property name="dataSource" ref="theDataSource"/>
   			<property name="mappingResources">
   				<list>
   					<value>com/xll/bean/User.hbm.xml</value>
   				</list>
   			</property>
   			<property name="hibernateProperties">
   				<value>
   					hibernate.dialect=org.hibernate.dialect.MySQLDialect
					hibernate.hbm2ddl.auto=update
					hibernate.show_sql=true
					hibernate.format_sql=true	
   				</value>
   			</property>
   </bean>
   
   
   <bean id="userServiceBean" class="com.xll.service.impl.UserServiceBean">
   			<property name="sessionFactory" ref="mySessionFactory">
   			</property>
   </bean>
</beans>




好了,代码一上,一目了然,下面进行测试:

package com.xll.impl.test;

import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.xll.bean.User;
import com.xll.service.UserService;

public class TestUser {
	private static UserService us;
	
	@BeforeClass
	public static void  setUpBeforeClass() throws Exception{
		ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
		 us = (UserService)ctx.getBean("userServiceBean");
	}
	
	@Test
	public void testSave(){
		User u = new User();
		u.setName("xiaoliang");
		us.save(u);
	}
	
}




跑起来了,结果如下:
08:37:38,343  INFO SchemaUpdate:155 - Running hbm2ddl schema update
08:37:38,343  INFO SchemaUpdate:167 - fetching database metadata
08:37:38,343  INFO SchemaUpdate:179 - updating schema
08:37:38,375  INFO DatabaseMetadata:119 - table not found: User
08:37:38,375  INFO DatabaseMetadata:119 - table not found: User
08:37:38,375 DEBUG SchemaUpdate:203 - create table User (id integer not null, name varchar(255), primary key (id))
08:37:38,437  INFO SchemaUpdate:217 - schema update complete
[b]Hibernate: 
    select
        max(id) 
    from
        User
Hibernate: 
    insert 
    into
        User
        (name, id) 
    values
        (?, ?)[/b]


插入成功!


再来看看我的事务功能起作用了没,在service实现类的save()中做如下修改,先不添加事务功能,
	// @Transactional
	public void save(User user) {
		hibernateTemplate.save(user);
		int i = 10/0;
	}


运行下测试类控制台打印:
08:40:37,140  INFO SchemaUpdate:155 - Running hbm2ddl schema update
08:40:37,140  INFO SchemaUpdate:167 - fetching database metadata
08:40:37,140  INFO SchemaUpdate:179 - updating schema
08:40:37,171  INFO TableMetadata:65 - table found: ssh.user
08:40:37,171  INFO TableMetadata:66 - columns: [id, name]
08:40:37,171  INFO TableMetadata:68 - foreign keys: []
08:40:37,171  INFO TableMetadata:69 - indexes: [primary]
08:40:37,171  INFO SchemaUpdate:217 - schema update complete
[b]Hibernate: 
    select
        max(id) 
    from
        User
Hibernate: 
    insert 
    into
        User
        (name, id) 
    values
        (?, ?)[/b]


且Junit红条,除零异常!但数据插入成功...


接下来开启事务功能,
	@Transactional
	public void save(User user) {
		hibernateTemplate.save(user);
		int i = 10/0;
	}


测试结果:
08:43:17,140  INFO SchemaUpdate:155 - Running hbm2ddl schema update
08:43:17,140  INFO SchemaUpdate:167 - fetching database metadata
08:43:17,156  INFO SchemaUpdate:179 - updating schema
08:43:17,203  INFO TableMetadata:65 - table found: ssh.user
08:43:17,203  INFO TableMetadata:66 - columns: [id, name]
08:43:17,203  INFO TableMetadata:68 - foreign keys: []
08:43:17,203  INFO TableMetadata:69 - indexes: [primary]
08:43:17,203  INFO SchemaUpdate:217 - schema update complete
[b]Hibernate: 
    select
        max(id) 
    from
        User[/b]


同时也抛出除零异常,以及还有别的异常,这时数据没有插入数据库,事务回滚功能成功!
分享到:
评论

相关推荐

    Spring与Hibernate集成

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

    spring 与hibernate的集成

    接下来,我们会在`applicationContext.xml`中配置数据源,这是Spring与Hibernate集成的基础。数据源(`dataSource`)通常使用Apache Commons DBCP库,因为它提供了连接池功能,能有效管理数据库连接,提高性能。配置...

    Spring与Hibernate集成---声明式事务

    本文将深入探讨如何将Spring与Hibernate进行集成,并重点介绍声明式事务的配置与使用。 Spring框架是一个全面的企业级应用开发框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java应用的复杂性。另...

    memcache也spring,hibernate的配置

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

    spring+hibernate配置与jar的配置下载

    ### Spring与Hibernate集成配置详解 #### 一、Spring框架简介及核心注解解析 Spring框架是目前企业级应用开发中最常用的轻量级框架之一,它提供了全面的基础架构支持,简化了Java应用程序的开发过程。Spring的核心...

    spring与hibernate以及ibatis集成的实例和具体配置图解

    在压缩包子文件的文件名称列表中,我们看到了“sping与Ibatis以及hibernate集成配置.doc”,这可能是一个详细的文档,包含了文字说明和可能的配置截图,帮助读者理解每个步骤。"TestSpringJDBC"可能是Spring对JDBC的...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    首先,让我们理解Spring与Hibernate的集成。为了整合这两个库,你需要在Spring配置文件中定义Hibernate的SessionFactory,并配置数据源。Spring通过`LocalSessionFactoryBean`来创建SessionFactory,它会读取...

    spring和hibernate集成Demo

    **Spring与Hibernate集成** 集成Spring和Hibernate的关键在于如何在Spring中管理Hibernate的SessionFactory和Transaction。这通常通过以下步骤实现: 1. **配置Hibernate**: 创建Hibernate的配置文件(如hibernate...

    ssh集成jar包,支持spring集成Hibernate,spring集成struts2等

    - Spring与Hibernate集成,通常使用Spring的HibernateTemplate或HibernateDaoSupport,提供事务管理和数据访问抽象,使得代码更简洁,事务控制更方便。 - Spring与Struts2集成,Spring可以作为Struts2的Action的...

    Spring与Hibernate集成授课代码

    本"Spring与Hibernate集成授课代码"资源旨在教授如何将这两个框架整合在一起,实现高效的数据访问和业务逻辑处理。集成Spring和Hibernate能够帮助开发者充分利用两者的优点,比如Spring的事务管理与Hibernate的数据...

    struts2 spring hibernate集成

    集成Struts2、Spring和Hibernate时,需要注意配置文件的正确设置,包括Action配置、Spring Bean的定义、Hibernate的数据库连接和实体映射。同时,理解这三个框架的工作原理和相互作用,对于解决问题和优化代码至关...

    Webwork+spring+hibernate集成实例

    在Webwork+Spring+Hibernate集成中,Spring通常作为整体架构的胶水,负责各组件的连接和协调。它可以管理Webwork的Action,通过依赖注入提供所需的Service和DAO。同时,Spring可以配置Hibernate SessionFactory,...

    Spring2 Hibernate3集成

    2. **对象关系映射**:Hibernate通过配置文件或注解的方式定义实体类与数据库表之间的映射关系,而Spring则负责管理这些实体对象的生命周期。 3. **异常处理**:Spring为Hibernate提供了一层异常转换机制,将...

    声明式事务控制spring+hibernate集成

    当Spring与Hibernate集成时,Spring可以负责事务的管理,而Hibernate则专注于数据持久化。 在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate...

    Struts,Spring与hibernate集成

    【Struts、Spring与Hibernate集成】是Java Web开发中常见的技术组合,用于构建高效、松耦合的MVC应用程序。这三大框架的集成使得开发者能够更好地管理数据访问、业务逻辑和用户界面,提高代码的可维护性和可测试性。...

    Spring与Hibernate整合

    在"25_黑马程序员_黎活明_Spring2.5视频教程_搭建和配置Spring与Hibernate整合的环境.avi"这个文件中,可能详细演示了如何配置这些库到项目的类路径中。 接着,需要配置Spring的IoC容器。这可以通过XML配置文件完成...

    Spring集成的Hibernate配置二级缓存

    本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...

    spring整合struts2与hibernate核心配置文件

    `struts2-spring-plugin.xml`配置Struts2与Spring的集成,确保Action类由Spring容器管理。`spring-context.xml`中,需要配置数据源、SessionFactory、事务管理器以及各业务层和DAO层的bean。Hibernate的`hibernate....

    spring-hibernate 4个版本

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

Global site tag (gtag.js) - Google Analytics