hibernate+spring的整合思路加实例(配图解)
首先框架整合我感觉最难的是jar包的引入。因为不同框架的jar容易产生冲突。如果能排除这个因素我想说整合框架还是相对比较容易的。
我整合的框架的一个思想就是:各司其职。因为每个框架处理的事务或者是层次是不一样的。
也就说我们可以这么想。Hibernate就是操纵数据库的是持久层的。而spring就是利用ioc的bean对类进行实例化化的。Spring就是一个容器。
基于这个思想我想到的就是最传统的思想。我写一个往数据库里面添加记录的实例。
所以我整合的步骤就是四步
第一步:搭建hibernate环境(包括引入hibernate的jar,包配置数据源,建立类和表的映射),为什么这么做。我觉得hibernate是最重要的。因为没有spring不影响我往数据里面添加记录。Spring仅仅是一个容器。
第二步:配置spring的环境(引入jar和写一个spring.XML的配置信息)
第三步:在spring里面注册hibernate。
第四步:测试
那么我们按照这个步骤。(我的是spring3.2和hibernate3.2这里两个版本一起很少见。但是只要里面jar不冲突是一点问题没有)
首先我们引入所有jar包:这里我就顺便把spring和hibernate 的全引进去了。
接着就是写hibernate.cgf.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="foo">
<property name="myeclipse.connection.profile">mysql</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/test
</property>
<property name="connection.username">root</property>
</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hbm2ddl.auto">update</property>//上面都是配置数据源,和本级数据库建立连接的。
<mapping resource="com/fish/dao/Person.hbm.xml" />//把映射表xml往这里注册。
</session-factory>
</hibernate-configuration>
那么我们写Person.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 package="com.fish.dao">
<class name="Person">//person映射类类名
<id name="id">
<generator class="native" />
</id>
<property name="name"></property>
<property name="passwrod"></property>
</class>
</hibernate-mapping>
当然我们写对应的person映射类类
package com.fish.dao;
publicclass Person {
String name;
String passwrod;
Integer id;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPasswrod() {
returnpasswrod;
}
publicvoid setPasswrod(String passwrod) {
this.passwrod = passwrod;
}
public Integer getId() {
returnid;
}
publicvoid setId(Integer id) {
this.id = id;
}
}
上面是对hibernate搭建。
接着我们来配置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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="person" class="com.fish.dao.Person">
<property name="name" value="tom"></property>
<property name="passwrod" value="330127"></property>
<bean id="sessionfactroy"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="hibernate.cfg.xml"></property> //这个bean是spring内部的一个类 // LocalSessionFactoryBean这个类实例化我们可以得到sessionfactory。该类中有个属性configLocation通过这个属性我们就可以hibernate.cfg.xml建立联系了。
</bean>
</beans>
下面我们来一个测试类。
package com.fish.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
publicclass Test {
publicstaticvoid main(String[] args) {
// Configuration configuration=new Configuration();
// configuration.configure("hibernate.cfg.xml");
//
// SessionFactory factory=configuration.buildSessionFactory();
// Session session=factory.openSession();
//
// Person person=new Person();
// person.setName("yaku");
// person.setPasswrod("123456");
// Transaction transaction=session.beginTransaction();
// session.save(person);
// transaction.commit();
// session.close();
上面注释的是我们没有加入spring对hibernate的测试。我们可以对比下面,看看spring给我做了什么;
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring.xml");
SessionFactory factory = (SessionFactory) context
.getBean("sessionfactroy"); //spring直接帮我们加载了hibernate.cgf.xml文件,让我们直接操作了sessionfactory。其实下面的事务管理我们也可以通过spring的来管理的。但是由于没写一个一个代理类所以就没写。
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person) context.getBean("person");
session.save(person);
transaction.commit();
session.close();
}
}
其实还有一种关联spring和hibernate的方法那就是将hibernate.cgx.XML放到spring来注册数据源,这样可以省去写hibernate.cgx.XML文件,但是这个个人感觉会给spring文件造成臃肿,所以我用的是分开的这种。
hibernate+spring的整合思路加实例(配图解)的更多相关文章
- struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决
最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myec ...
- Hibernate + Spring (quartz) 整合懒(延迟)加载问题
开发项目的时候 在一个Job中执行了数据库操作, 用的是懒加载,但是如下错误 org.hibernate.LazyInitializationException: failed to lazily i ...
- spring boot整合redis多实例
最近项目中遇到需要连接两个redis实例的情况,于是就在spring boot原先的基础上修改了一点. 首先,添加所需的依赖 <dependency> <groupId>org ...
- 【转】pringMVC+Hibernate+Spring 简单的一个整合实例
ref:http://langgufu.iteye.com/blog/2088355 SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,我在博客 ...
- Spring与Hibernate、Mybatis整合
在Web项目中一般会把各个web框架结合在一起使用,比如spring+hibernate,spring+ibatis等,如此以来将其他的框架整合到spring中来,便有些少许的不便,当然spring已 ...
- Spring + mybatis整合方案总结 结合实例应用
Spring + mybatis整合实例应用 项目结构图 (Spring3.0.2 +mybatis3.0.4) 方案一: 通过配置文件整合Spring和mybatis 应用数据库 -- --数据库 ...
- Struts、Hibernate和Spring的整合
Spring整合Hibernate Spring以其开放性,能与大部分ORM框架良好的整合.这样Spring就能轻松地使用ORM. Spring提供了DAO支持,DA0组件是应用的持久层访问的重要组件 ...
- Struts2+Hibernate+Spring 整合示例
转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSH框架(Struts2+Spring+Hibernate)搭建整合详细步骤
在实际项目的开发中,为了充分利用各个框架的优点,通常都会把 Spring 与其他框架整合在一起使用. 整合就是将不同的框架放在一个项目中,共同使用它们的技术,发挥它们的优点,并形成互补.一般而言,在进 ...
随机推荐
- 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
效果图 上传文件页面: 下载文件页面: 1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="tr ...
- [学习笔记]js动画实现方法,作用域,闭包
一,js动画基本都是依靠setInterval和setTimeout来实现 1,setInterval是间隔执行,过一段时间执行一次代码 setInterval(function(){},500);即 ...
- js 计算两个时间差
/* * 计算两个日期的间隔天数* BeginDate:起始日期的文本框,格式為:2012-01-01* EndDate:結束日期的文本框,格式為:2012-01-02* 返回兩個日期所差的天數* 調 ...
- Windows 配置JAVA的环境变量
Java是由Sun公司开发的一种应用于分布式网络环境的程序设计语言,Java语言拥有跨平台的特性,它编译的程序能够运行在多种操作系统平台上,可以实现“一次编写,到处运行”的强大功能. 工具/原料 JD ...
- 5.5 Function类型
说起来ECMAScript中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此 ...
- 把一个数组向右循环移动k位要求时间复杂度为O(n)
今晚做了下某公司的网络笔试题,好久没刷题了,现在渣得要死,里面有道程序设计题是 把一个数组向右循环移动k位要求时间复杂度为O(n) 给的方法定义为 public void solution(int a ...
- IOS文件沙盒
在进行IPhone开发的时候,常常需要将简单的数据保存到文件中,以便下次再重新打开的时候能够读取文件中保存的数据. 下面就来做一个简单的demo: 步骤: 1.创建一个SingleView项目,带有x ...
- 编译和安装shibboleth-sp遇到的问题
In file included from mod_shib_20.cpp:68: mod_shib.cpp:118: warning: deprecated conversion from stri ...
- 不可不知的HTML优化技巧
如何提升Web页面的性能,很多开发人员从多个方面来下手如JavaScript.图像优化.服务器配置,文件压缩或是调整CSS. 很显然HTML 已经达到了一个瓶颈,尽管它是开发Web 界面必备的核心语言 ...
- eclipse主题插件
打开eclipse ,选择 Help 选择Install New Software 点击 Add 输入http://eclipse-color-theme.github.com/update,选中Ec ...