spring和hibernate的整合
阅读目录
一、概述
Spring整合Hibernate有什么好处?
1、由IOC容器来管理Hibernate的SessionFactory
2、让Hibernate使用上Spring的声明式事务
二、整合步骤
1.大致步骤
1)、加入Hibernate
- 加入hibernate jar包
- 添加Hibernate的配置文件:hibernate.cfg.xml
2)、加入Spring
- 加入spring jar包
- 加入Spring配置文件
3)、编写测试类
下图为项目建立的目录结构:

2.具体分析:
1).导入jar包(若是maven工程则可以更加简单)

2).写类及配置文件
a).编写domain类

Classes.java代码如下:
package com.yanwu.www.spring_hibernate.domain;
import java.io.Serializable;
public class Classes implements Serializable{
private Long cid;
private String cname;
public Long getCid() {
return cid;
}
public void setCid(Long cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
private String description;
}
映射文件Classes.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">
<hibernate-mapping>
<class name="com.yanwu.www.spring_hibernate.domain.Classes">
<id name="cid" type="java.lang.Long" length="5">
<column name="cid"></column>
<generator class="increment"></generator>
</id>
<property name="cname" length="20"></property>
<property name="description" length="50"></property>
</class>
</hibernate-mapping>
b).编写dao类

ClassesDao.java代码如下:
package com.yanwu.www.spring_hibernate.dao;
import com.yanwu.www.spring_hibernate.domain.Classes;
public interface ClassesDao {
public void saveClasses(Classes classes);
}
c).编写dao实现类Impl

ClassesDaoImpl.java代码如下:
package com.yanwu.www.spring_hibernate.dao.impl; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.yanwu.www.spring_hibernate.dao.ClassesDao;
import com.yanwu.www.spring_hibernate.domain.Classes; public class ClassesDaoImpl extends HibernateDaoSupport implements ClassesDao{ @Override
public void saveClasses(Classes classes) {
this.getHibernateTemplate().save(classes);
} }
d).编写service类(业务层接口)

ClassesService.java代码如下:
package com.yanwu.www.spring_hibernate.service;
import com.yanwu.www.spring_hibernate.domain.Classes;
public interface ClassesService {
public void saveClasses(Classes classes);
}
e).编写service实现类Impl(业务层接口的实现)

ClassesServiceImpl.java代码如下:
package com.yanwu.www.spring_hibernate.service.impl;
import com.yanwu.www.spring_hibernate.dao.ClassesDao;
import com.yanwu.www.spring_hibernate.domain.Classes;
import com.yanwu.www.spring_hibernate.service.ClassesService; public class ClassesServiceImpl implements ClassesService{
private ClassesDao classesDao;
public ClassesDao getClassesDao() {
return classesDao;
}
public void setClassesDao(ClassesDao classesDao) {
this.classesDao = classesDao;
}
public void saveClasses(Classes classes){
this.classesDao.saveClasses(classes);
}
}
f).spring的配置

applicationContext.xml的代码如下:
说明:利用配置来得到session工厂
<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">
<!--
Session 工厂配置
LocalSessionFactoryBean这个类实例化我们可以得到sessionfactory。
该类中有个属性configLocation通过这个属性我们就可以hibernate.cfg.xml建立联系了。
id="sessionFactory"的配置需要与hibernate.cfg.xml建立联系
--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean> <!-- 加载配置文件jdbc.properties ,在其中保存数据库信息,方便日后维护-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean> <!-- 配置数据源 -->
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean> <bean id="sessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 引用数据源 -->
<property name="dataSource" ref="dataSource"/> <!-- 加载实体类的映射文件位置及名称,可以使用通配符 -->
<property name="mappingResources">
<list>
<value>com/yanwu/www/spring_hibernate/domain/Classes.hbm.xml</value>
</list>
</property> <!-- 配置数据库方言,这里是MySQL -->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
</value>
</property> </bean> <bean id="classesDao" class="com.yanwu.www.spring_hibernate.dao.impl.ClassesDaoImpl"> <property name="sessionFactory">
<ref bean="sessionFactory1"/>
</property>
</bean> <bean id="classesService" class="com.yanwu.www.spring_hibernate.service.impl.ClassesServiceImpl" >
<property name="classesDao">
<ref bean="classesDao"/>
</property>
</bean> <!-- 配置Spring声明式事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory1"/>
</property>
</bean> <!-- 配置事务事务属性 --> <tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<!-- 方法对应的传播属性 -->
<tx:method name="save*" read-only="false"/>
</tx:attributes>
</tx:advice> <!-- 配置事务切点,并把切点和事务属性关联起来,事务控制位置,一般在业务实现层 -->
<aop:config>
<aop:pointcut expression="execution(* com.yanwu.www.spring_hibernate.service.impl.ClassesServiceImpl.*(..))" id="perform"/>
<aop:advisor advice-ref="tx" pointcut-ref="perform"/>
</aop:config>
</beans>
g).hibernate和数据库信息的配置(可选)

hibernate.cfg.xml代码如下:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--
数据库的用户名
-->
<property name="connection.username">root</property>
<!--
密码
-->
<property name="connection.password">root</property>
<!--
url
-->
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!--
方言
告诉hibernate,要操作的数据库是mysql
-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--
导入驱动
-->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--
validate
只检查结构
update
检查结构,更新或者创建表
create
每次启动hibernate时,都要创建表
create-drop
启动hibernate时创建表,当hibernate关闭时,删除表
-->
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/yanwu/www/spring_hibernate/domain/Classes.hbm.xml" /> </session-factory>
</hibernate-configuration>
jdbc.properties代码如下:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/test
jdbc.username=root
jdbc.password=root
3).写测试类

ClassesServiceTest.java代码如下:
package com.yanwu.www.spring_hibernate.test; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yanwu.www.spring_hibernate.domain.Classes;
import com.yanwu.www.spring_hibernate.service.ClassesService; public class ClassesServiceTest {
@Test
public void testSaveClasses(){
ApplicationContext context = new ClassPathXmlApplicationContext("com/yanwu/www/spring_hibernate/config/applicationContext.xml");
ClassesService classesService = (ClassesService) context.getBean("classesService");
Classes classes = new Classes();
classes.setCname("aa");
classesService.saveClasses(classes);
}
}
至此,完成了spring和hibernate的整合,第一次写博客,请大家多多指导。提供项目下载地址:https://pan.baidu.com/s/1kUCohYf
spring和hibernate的整合的更多相关文章
- SSH(Spring SpringMVC Hibernate)框架整合
项目说明: 使用SSH(Spring SpringMVC Hibernate)框架整合添加部门功能 项目结构 1.导入依赖jar包 <!--单测--> <dependency&g ...
- Spring+Struts2+Hibernate的整合
这篇主要采用Maven搭建Spring+Struts2+Hibernate的整合项目,复习一下SSH框架,虽然spring提供自己的MVC框架, 但是Spring也提供和其他框架的无缝整合,采用组件形 ...
- Spring+Struts2+Hibernate框架整合流程
一:基本步骤 新建Maven项目,导入相关依赖(推荐) 在WEB-INF的web.xml中进行配置 ————–Hibernate配置 —————- 创建entity包,创建数据库相关实体类 根据实体类 ...
- Spring 和 Hibernate的整合
问题 ,spring 和 hibernate 整合 如何整合 1. Spring 使用Hibernate的的SessionFactory 2. Hibernate使用Spring提供的声明式事务
- 【spring 6】Spring和Hibernate的整合:编程式事务
一.编程式事务简介 在 Spring 出现以前,编程式事务管理对基于 POJO 的应用来说是唯一选择.用过 Hibernate 的人都知道,我们需要在代码中显式调用beginTransaction() ...
- Spring + Spring MVC+Hibernate框架整合详细配置
来源于:http://www.jianshu.com/p/8e2f92d0838c 具体配置参数: Spring: spring-framework-4.2.2Hibernate: hibernate ...
- ssh整合思想 Spring与Hibernate的整合 项目在服务器启动则自动创建数据库表
Spring整合Hibernate Spring的Web项目中,web.xml文件会自动加载,以出现欢迎首页.也可以在这个文件中对Spring的配置文件进行监听,自启动配置文件, 以及之前Struts ...
- ssh整合思想 Spring与Hibernate的整合ssh整合相关JAR包下载 .MySQLDialect方言解决无法服务器启动自动update创建表问题
除之前的Spring相关包,还有structs2包外,还需要Hibernate的相关包 首先,Spring整合其他持久化层框架的JAR包 spring-orm-4.2.4.RELEASE.jar ( ...
- Spring+SpringMVC+Hibernate简单整合(转)
SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Str ...
随机推荐
- Spring实战——缓存
缓存 提到缓存,你能想到什么?一级缓存,二级缓存,web缓存,redis-- 你所能想到的各种包罗万象存在的打着缓存旗号存在的各种技术或者实现,无非都是宣扬缓存技术的优势就是快,无需反复查询等. 当然 ...
- 速成制作rpm包
FPM 由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包.通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐.这就用到了FP ...
- Spring数据库访问
一般采用第三方具有连接缓冲池的数据源实现类:spring支持最常见的两个具有连接缓冲池的数据源为:DBCP和C3P0; DBCP(Database connection pool) 是Apache的一 ...
- bzoj2144 【国家集训队2011】跳跳棋
Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...
- 利刃 MVVMLight 8:DispatchHelper在多线程和调度中的使用
在应用程序中,线程可以被看做是应用程序的一个较小的执行单位.每个应用程序都至少拥有一个线程,我们称为主线程,这是在启动时调用应用程序的主方法时由操作系统分配启动的线程. 当调用和操作主线程的时候,该操 ...
- 跟着刚哥学习Spring框架--创建HelloWorld项目(一)
1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...
- asp.net 母版-页脚制作
1.母版创建流程略过. 2.创建母版页css:Site.css body { } .linkButton{ text-decoration:none; color:whitesmoke; } 3.母版 ...
- oracle的神奇化学反应(行转列+获取表字段)
橘子+汽水=橘子汽水,∑(゚Д゚ノ)ノ好无聊!!! 火鸡+烤架=烤火鸡,ლ(´ڡ`ლ)还不错. wm_concat()+表字段查询=(✪ω✪)会是啥呢? wm_concat()函数,该函数可以把列值以 ...
- 转:Linux中文显示乱码?如何设置centos显示中文
怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导 ...
- CATransition 转场动画解析
http://blog.csdn.net/mad2man/article/details/17260901