首先建个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配置二级缓存、cache.xml
spring整合struts2与hibernate核心配置文件
Struts2+Spring+Hibernate集成开发环境的配置小例子。
集成springmvc spring hibernate的配置过程 文档
为Spring集成的Hibernate配置二级缓存
flex4+blazeds+spring+hibernate集成源码。内附完整jar包以及配置。给后来知道者帮助。
该资料包里面包含的东西非常的直观,主要是配置的过程,以及具体的实例。
springboot2.0多数据源集成hibernate配置hibernateDaoSupport, dao层继承hibernateDaoSupport, 不使用jpa方式。
Hibernate Session的轻量级封装 * 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的 * 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理 * 关于事务...
Spring2+Struts1_2+Hibernate3_0集成时的配置
在此贴出来与大家共享,绝对真实,提供数据库,需求文档,源代码,只要部署着Myclipse上,配置好数据库直接可以运行。如不清楚,我里面有说明文档。
springmvc spring3 hibernate4 log4j 完整的注解配置 spring切面自动打日志等,需要自己建一个小表 可运行 并且已经将bootstrap集成进去.
实现 xFire与 Spring 的集成
你还可以查看 有详细极介绍。我从第一天中午到第二天中午才搞好,早网上查到配置方法我试了试都不行,一直不知道错的什么地方了。 该文件不需要 把dll文件放入 system32 目录下面,完全可迁移。
如何在myeclipse中配置对三个框架的集成Spring\Hibernate\Struts
5.单数据源配置(兼容Tomcat和Weblogic)。 6.Hibernate继承 HibernateDaoSupport。 7.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.Eclipse 导入后可能...
Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...
随着struts的安全问题的暴露,原由Struts2+spring+hibernate构成的SSH2已经被越来越多的开发者所弃用,反而,由Spring+SpringMVC+Hibernate构成的SSH框架越来越受欢迎!这里提供了一个案例代码,希望对大家搭建环境...
spring+springMVC+hibernate集成,包括配置文件applicationContext.xml、web.xml、springMVC-servlet.xml
首先添加一个WEB工程 然后依次添加Struts框架,spring框架,...在添加Hibernate时注意选择现有的Spring配置文件,Hibernate的配置文件集成在Spring的配置文件中 最后在映射表的时候选择Spring的DAO作为IoC的实现