`

spring中对hibernate的支持是非常强大的

阅读更多

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模版,开发起来速度非常快,调试也很容易。它能够解决如何在团队内贯彻设计方案的问题。

 

 
分享到:
评论

相关推荐

    Spring Persistence with Hibernate

    Hibernate支持多种数据库,具备高度可移植性,同时提供了丰富的API和注解,便于开发者进行复杂的数据操作。 在Spring和Hibernate的整合中,Spring通过其HibernateTemplate或SessionFactoryBean等组件来管理...

    Spring与Hibernate集成

    在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全方位的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种服务管理功能。而Hibernate则是一个优秀的对象关系映射...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...

    struts2+spring4+hibernate

    Struts2、Spring4和Hibernate是Java开发中的三大框架,它们在构建企业级Web应用程序时起着核心作用。本教程将深入探讨这三个框架如何协同工作,以实现高效、灵活和可扩展的电子商务平台。 首先,Struts2是一个基于...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    spring4.2+hibernate5环境开发全部jar包

    在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的后端应用程序框架,提供了依赖注入、AOP(面向切面编程)、数据访问、事务管理等多种功能,而Hibernate则是一个强大的对象关系...

    spring3.0+hibernate3.3+mysql8.0

    Hibernate 3.3版本提供了许多改进,包括性能优化、对JPA的支持以及更完善的缓存策略。在Spring框架中,我们可以利用Spring的HibernateTemplate或SessionFactoryBean来配置和管理Hibernate,以实现数据持久化。 **...

    memcache也spring,hibernate的配置

    4. **Spring与Hibernate的集成**:Spring提供了对Hibernate的全面支持,可以通过SessionFactoryBean配置来管理Hibernate的SessionFactory,并通过HibernateTemplate或HibernateJpaDialect进行数据访问操作。...

    spring2.5 hibernate api

    Spring的Hibernate支持还包括事务模板和HibernateTemplate,它们可以帮助开发者避免直接与SessionFactory和Session交互,从而减少代码中的错误和重复。 Spring的DAO(Data Access Object)支持为基于Hibernate的...

    gwt+spring+hibernate

    - **MyEclipse集成**: MyEclipse是一款强大的Java EE集成开发环境,支持GWT插件,使得开发者可以直接在IDE中调试和运行GWT应用。 - **精简版包**: 提供的压缩包可能只包含了示例应用的核心部分,去除了不必要或非...

    spring,spring mvc,hibernate,ehcache JavaWeb后台框架

    在Java Web开发领域,Spring、Spring MVC、Hibernate和Ehcache是四个非常关键的框架,它们共同构建了一个强大且高效的后台开发环境。下面将详细解释这些框架的核心功能和使用方式。 1. **Spring框架**:Spring是...

    用Maven搭建Spring+Spring MVC+Hibernate框架

    在IT行业中,构建大型、模块化的Java应用时,通常会采用一些成熟的框架组合,例如Spring、Spring MVC和Hibernate。这些框架协同工作,可以提供强大的后端功能,包括依赖注入、模型-视图-控制器(MVC)架构以及对象...

    spring3 hibernate3 整合

    1. **配置Spring的Hibernate支持**:在Spring的配置文件中,我们需要定义Hibernate的SessionFactory Bean,这是创建和管理Hibernate会话的工厂。这通常包括DataSource的配置、Hibernate的配置属性以及SessionFactory...

    spring3.2+hibernate4.0整合

    在IT领域,Spring框架和Hibernate框架是两个非常重要的开源项目,它们在企业级Java应用开发中扮演着核心角色。Spring3.2与Hibernate4.0的整合是许多开发者在构建现代Java Web应用时会选择的技术栈,因为它们可以提供...

    Spring3整合Hibernate4测试Demo

    在Java Web开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的后端应用程序框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及其他企业级功能。而Hibernate则是一个强大的...

    spring4.3.7+hibernate5+springmvc整合jar包

    在IT行业中,Spring、Hibernate和SpringMVC是三个非常重要的框架,它们分别专注于不同领域的功能。Spring是一个全面的Java企业级应用开发框架,提供依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-...

    spring+Hibernate开发文档

    Spring和Hibernate是两个非常重要的Java开发框架,它们在企业级应用开发中占据着核心地位。Spring是一个全面的、模块化的企业应用开发框架,而Hibernate则是一个强大的对象关系映射(ORM)工具,使得开发者可以方便...

    [轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发

    此外,Spring3还提供了对JDBC、JPA、Hibernate等持久层技术的集成支持。 Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库操作,允许开发者用Java对象的方式来操作数据库记录,而无需编写SQL语句。...

    spring4.0+hibernate4.2

    在IT行业中,Spring、Hibernate和Struts2是Java企业级应用开发中的三大核心框架,它们分别专注于不同层面的问题。Spring4.0版本是Spring框架的一个重要里程碑,它提供了许多改进和新特性,使得应用程序的开发更为...

Global site tag (gtag.js) - Google Analytics