spring中对hibernate的支持是非常强大的,从一个简单的例子就看得出来,从这个例子中我们还将对所谓的轻量级容器做一些讨论。
首先需要配置数据源,通常我们有两种方式获得Connection,一是自己编写代码获得连接,二是从JNDI环境中得到DataSource,然后产生一个Connection。无论怎样,既然是spring下面的对象,就应该注册到配置文件中。假设我们需要一个连接mysql下面一个叫做examer的数据库,手动方式的配置是:
[bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"]
[property name="driverClassName"]
[value]com.mysql.jdbc.Driver[/value]
[/property]
[property name="url"]
[value]jdbc:mysql://localhost/examer</value]
[/property]
[property name="username"]
[value]root[/value]
[/property]
[property name="password"]
[value][/value]
[/property]
[/bean]
很好读是不是?假如我们使用JNDI数据源,那么dataSource的声明就应该是:
[bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"]
[property name="jndiName"]
[value]java:compenvjdbcspringExamer[/value]
[/property]
[/bean]
你需要在JNDI环境中绑定一个名为jdbc/springExamer的东西,这段代码才有实际意义。另外需要提醒的是,所有的bean声明,它的id必须是唯一的。
在本系统中,数据库操作是被hibernate封装起来的,所以dataSource是不需要注入到具体的逻辑类中,它只会被注给hibernate的sessionFactory。
按照常规思路,我们需要在spring中注册hibernate的sessionFactory,它应该是我们自己编写的一个类,获得dataSource,返回sessionFactory,其他的逻辑类通过这个sessionFactory获得session进行数据库操作。
但是我们有另外一种选择,spring直接提供了对sessionFactory的封装,你只需要注册一个spring自己的类,给它提供必须的属性,它会返回一个org.springframework.orm.hibernate.HibernateTemplate,这个类封装了add、del等操作,它的封装程度相当高,通过它来编写hibernate应用非常简单。但是问题出来了,我们该如何选择?
表面上看,使用spring自己的库无疑更加简单,但是请注意,spring是一个轻量级的框架,所谓轻量级,一个重要特征就是无侵入性,也就是你使用这套框架,不会被它绑定,被spring管理的类,应该不需要使用它的接口和抽象类,这样你的系统不会对spring产生依赖。但是如果你使用了spring封装的方式去操作hibernate,就必须继承org.springframework.orm.hibernate.support.HibernateDaoSupport类,这导致了绑定。所以做这样的选择是有点痛苦的,如果有一天spring框架不存在了,你的代码怎么升级维护?具体问题只能具体分析,在我们的应用中,完全使用了spring封装的HibernateTemplate,它太好用了,所以容易上瘾。
假设我们有一张student表,结构很简单:
id 自动增长
name varchar(40)
password varchar(32)
grade int(4) 年级
sex Boolean 性别(true为男,false为女)
设计一个Student类来映射这张表:
/*
* 创建日期 2005-3-17
*/
package net.bromon.spring.examer.pojo;
/**
* @author Bromon
*/
public class Student
{
private int id;
private String name;
private String password;
private int grade;//年级
private boolean sex;
getset方法……….
}
编写Student.hbm.xml,让hibernate知道如何去关联student表和Student类,该文件和Student.java在同一目录:
[hibernate-mapping>
[class name="net.bromon.spring.examer.pojo.Student" table="student"]
[id name="id" column="id"]
[generator class="identity"/]
[/id]
[property name="name" column="name" /]
[property name="password" column="password" /]
[property name="grade" column="grade" /]
[property name="sex" column="sex" /]
[/class]
[/hibernate-mapping]
然后我们可以在spring中配置sessionFactory:
[bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"]
[property name="dataSource"]
<ref bean="dataSource"/]
[/property>
[property name="hibernateProperties"]
<props]
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop]
</props]
[/property]
[property name="mappingDirectoryLocations"]
[list]
[value]classpath:/netbromonspringexamerpojo[/value]
[/list]
[/property]
[/bean]
其中引用了我们之前注册过的dataSource,mappingDirectoryLocations属性指明了.hbm.xml文件在哪里路径,该文件夹下面的.hbm.xml文件会被全部加载。
一切都准备就绪,现在我们要加入一个StudentManager类,来进行增删查改的操作:
/*
* 创建日期 2005-3-17
*/
package net.bromon.spring.examer.student;
import net.bromon.spring.examer.pojo.Student;
import org.springframework.orm.hibernate.HibernateTemplate;
import org.springframework.orm.hibernate.LocalSessionFactoryBean;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
/**
* @author Bromon
*/
public class StudentManager extends HibernateDaoSupport
{
private LocalSessionFactoryBean sessionFactory;
private HibernateTemplate ht;
public StudentManager()
{
this.ht=super.getHibernateTemplate();
}
public void add(Student s)
{
ht.save(s);//插入一条数据只需要这一行代码
}
}
该类只演示了如何增加一个Student,HibernateTemplate还封装了很多有用的方法,请查阅spring文档。StudentManager中的sessionFactory是由spring注入的,但是StudentManager并没有对sessionFactory做任何的处理,这是因为所有的处理都被HibernateDaoSupport.getHibernateTemplate()封装。整个StudentManager中也看不到任何的异常处理,他们也都被基类封装了。
最后一个步骤就是在spring中注册StudentManger,然后向它注入sessionFactory:
[bean id="studentManager" class="net.bromon.spring.examer.student.StudentManager"]
[property name="sessionFactory"]
[ref bean="sessionFactory"/]
[/property]
[/bean]
所有的配置都完成了,下面做单元测试:
/*
* 创建日期 2005-3-17
*/
package net.bromon.spring.examer.student.test;
import java.io.FileInputStream;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import net.bromon.spring.examer.pojo.Student;
import net.bromon.spring.examer.student.StudentManager;
import junit.framework.TestCase;
/**
* @author Bromon
*/
public class TestStudentManager extends TestCase {
public void testAdd()
{
try
{
ApplicationContext context =new ClassPathXmlApplicationContext("springConfig.xml");
Student s=new Student();
s.setName("bromon");
s.setPassword("123");
s.setGrade(3);
s.setSex(true);
((StudentManager)context.getBean("studentManager")).add(s);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
Spring已经将hibernate的操作简化到了非常高的程度,最关键的是整个开发可以由设计来驱动,如果一个团队对spring有足够的熟悉,那么完全可以由设计师规划所有的类,整理清楚类之间的关系,写成配置文件,然后编写hibernate映射文件,将数据表与pojo关联,成员就可以完全在设计方案内工作,利用spring封装好的hibernate模版,开发起来速度非常快,调试也很容易。它能够解决如何在团队内贯彻设计方案的问题。
分享到:
相关推荐
Hibernate支持多种数据库,具备高度可移植性,同时提供了丰富的API和注解,便于开发者进行复杂的数据操作。 在Spring和Hibernate的整合中,Spring通过其HibernateTemplate或SessionFactoryBean等组件来管理...
在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全方位的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种服务管理功能。而Hibernate则是一个优秀的对象关系映射...
Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...
Struts2、Spring4和Hibernate是Java开发中的三大框架,它们在构建企业级Web应用程序时起着核心作用。本教程将深入探讨这三个框架如何协同工作,以实现高效、灵活和可扩展的电子商务平台。 首先,Struts2是一个基于...
Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...
在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的后端应用程序框架,提供了依赖注入、AOP(面向切面编程)、数据访问、事务管理等多种功能,而Hibernate则是一个强大的对象关系...
Hibernate 3.3版本提供了许多改进,包括性能优化、对JPA的支持以及更完善的缓存策略。在Spring框架中,我们可以利用Spring的HibernateTemplate或SessionFactoryBean来配置和管理Hibernate,以实现数据持久化。 **...
4. **Spring与Hibernate的集成**:Spring提供了对Hibernate的全面支持,可以通过SessionFactoryBean配置来管理Hibernate的SessionFactory,并通过HibernateTemplate或HibernateJpaDialect进行数据访问操作。...
Spring的Hibernate支持还包括事务模板和HibernateTemplate,它们可以帮助开发者避免直接与SessionFactory和Session交互,从而减少代码中的错误和重复。 Spring的DAO(Data Access Object)支持为基于Hibernate的...
- **MyEclipse集成**: MyEclipse是一款强大的Java EE集成开发环境,支持GWT插件,使得开发者可以直接在IDE中调试和运行GWT应用。 - **精简版包**: 提供的压缩包可能只包含了示例应用的核心部分,去除了不必要或非...
在Java Web开发领域,Spring、Spring MVC、Hibernate和Ehcache是四个非常关键的框架,它们共同构建了一个强大且高效的后台开发环境。下面将详细解释这些框架的核心功能和使用方式。 1. **Spring框架**:Spring是...
在IT行业中,构建大型、模块化的Java应用时,通常会采用一些成熟的框架组合,例如Spring、Spring MVC和Hibernate。这些框架协同工作,可以提供强大的后端功能,包括依赖注入、模型-视图-控制器(MVC)架构以及对象...
1. **配置Spring的Hibernate支持**:在Spring的配置文件中,我们需要定义Hibernate的SessionFactory Bean,这是创建和管理Hibernate会话的工厂。这通常包括DataSource的配置、Hibernate的配置属性以及SessionFactory...
在IT领域,Spring框架和Hibernate框架是两个非常重要的开源项目,它们在企业级Java应用开发中扮演着核心角色。Spring3.2与Hibernate4.0的整合是许多开发者在构建现代Java Web应用时会选择的技术栈,因为它们可以提供...
在Java Web开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的后端应用程序框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及其他企业级功能。而Hibernate则是一个强大的...
在IT行业中,Spring、Hibernate和SpringMVC是三个非常重要的框架,它们分别专注于不同领域的功能。Spring是一个全面的Java企业级应用开发框架,提供依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-...
Spring和Hibernate是两个非常重要的Java开发框架,它们在企业级应用开发中占据着核心地位。Spring是一个全面的、模块化的企业应用开发框架,而Hibernate则是一个强大的对象关系映射(ORM)工具,使得开发者可以方便...
此外,Spring3还提供了对JDBC、JPA、Hibernate等持久层技术的集成支持。 Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库操作,允许开发者用Java对象的方式来操作数据库记录,而无需编写SQL语句。...
在IT行业中,Spring、Hibernate和Struts2是Java企业级应用开发中的三大核心框架,它们分别专注于不同层面的问题。Spring4.0版本是Spring框架的一个重要里程碑,它提供了许多改进和新特性,使得应用程序的开发更为...