SSHSpring与Hibernate整合
Posted sihai_1991
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSHSpring与Hibernate整合相关的知识,希望对你有一定的参考价值。
Spring与Hibernate整合目的:
1,由Spring的IOC容器管理单例的SessionFactory对象。
2,由Spring管理事务。
步骤:
1,分别添加Spring与Hibernate的jar包以及mysql驱动包如下所示(hibernate3与spring4.3)。
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
3,在beans.xml中配置声明式事务管理
<!-- 配置声明式事务管理(采用基于注解的方式) -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
4,创建表:
mysql> use db6;
Database changed
mysql> create table user(id int primary key auto_increment,name varchar(20));
Query OK, 0 rows affected (0.19 sec)
mysql> desc user;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
5,src目录下新建Hibernate.cfg.xml配置文件:
<hibernate-configuration>
<session-factory>
<!-- 配置数据库的基本连接信息 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///db6</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!--自动更新表结构 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--显示查询语句 -->
<property name="show_sql">true</property>
<!-- 导入映射文件 -->
<mapping resource="cn/lsh/ssh/domain/User.hbm.xml" />
</session-factory>
6,新建实体类及所对应的映射文件:
package cn.lsh.ssh.domain;
public class User
private Integer id;
private String name;
public Integer getId()
return id;
public void setId(Integer id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
User.hbm.xml映射文件:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.lsh.ssh.domain">
<class name="User" table="user">
<id name="id" column="ID" type="integer">
<generator class="native"/>
</id>
<property name="name" column="NAME" type="string"/>
</class>
</hibernate-mapping>
7,新建UserDao类:
package cn.lsh.ssh.dao;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import cn.lsh.ssh.domain.User;
@Repository("userDao")//声明名称为userDao的bean对象(如果没有指定,默认为类的全名)
public class UserDao
@Resource//把sessionFactory注入到容器中
private SessionFactory sessionFactory;
//当Hibernate与Spring整合后要调用.getCurrentSession()方法的到Session,
//而不是调用.openSession()得到Session.
//调用getCurrentSession()方法的目的是:让Spring准备好session;管理事物.
public void saveUser(User user)
Session session = sessionFactory.getCurrentSession();
session.save(user);
8,新建UserService类:
package cn.lsh.ssh.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.lsh.ssh.dao.UserDao;
import cn.lsh.ssh.domain.User;
@Service("userService")//声明名称为userService的bean对象
public class UserService
@Resource//注入到容器中
private UserDao userDao;
@Transactional//开启事物(如果类名上,则说此类所有的成员方法开启事物)
public void saveTwoUser()
userDao.saveUser(new User());
//int i=1/0;
userDao.saveUser(new User());
9,新建测试类(测试sessionFactory和事物):
package cn.lsh.ssh.test;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.lsh.ssh.service.UserService;
public class TestDemo1
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
//测试IOC管理sessionFactory
@Test
public void testSessionFactory()
SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");
System.out.println(sessionFactory);
//控制台输出结果为org.hibernate.impl.SessionFactoryImpl@a6a435f,
//说明通过IOC管理sessionFactory成功,测试通过
//测试事物
@Test
public void testTxManager()
UserService service = (UserService) ac.getBean("userService");
service.saveTwoUser();
在测试事物时,让其报异常,查看数据库表的数据有无回滚;有则说明IOC管理事物成功。
需要注意的是注意:
当Hibernate与Spring整合后要调用.getCurrentSession()方法的到Session,而不是调用.openSession()得到Session.调用getCurrentSession()方法的目的是:让Spring准备好session;管理事物.
以上是关于SSHSpring与Hibernate整合的主要内容,如果未能解决你的问题,请参考以下文章