`

使用MyEclipse集成SSH(一)整合Spring和Hibernate

阅读更多

Spring整合Hibernate的价值在于Spring为Hibernate增加了以下内容:


* Session management:Spring为Hibernate的session提供了有效、容易和安全的控制
* Resource management:Spring控制Hibernate的SessionFactories,JDBC datasources及其它相关资源
* Integrated transaction management:完整的事务管理
* Exception wrapping:异常的包装

 

1. 利用Spring IoC容器创建SessionFactory

 

可以使用org.springframework.orm.hibernate3.LocalSessionFactoryBean创建SessionFactory实例,共有以下二种方式:


1) 【最佳方案】直接使用Hibernate配置文件hibernate.cfg.xml


 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="myeclipse.connection.profile">
                com.microsoft.sqlserver.jdbc.SQLServerDriver
        </property>
        <property name="connection.url">
                jdbc:sqlserver://localhost:1433;databaseName=SSH
        </property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>
        <property name="connection.driver_class">
                com.microsoft.sqlserver.jdbc.SQLServerDriver
        </property>
        <property name="dialect">
                org.hibernate.dialect.SQLServerDialect
        </property>
        <mapping resource="cn/qdqn/ssh/entity/UserInfo.hbm.xml" />
    </session-factory>
</hibernate-configuration>

 
 Spring配置文件中SessionFactory初始化配置方法:

 

 

 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation"
            value="classpath:hibernate.cfg.xml">
        </property>
</bean>

 

 

2) 在Spring配置文件中整合所有Hibernate配置参数

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" 
                          value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
        <property name="url" 
                          value="jdbc:sqlserver://localhost:1433;databaseName=SSH"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource">
        </property>
        <property name="mappingResources">
            <list>
               <value>cn/qdqn/ssh/entity/UserInfo.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                     org.hibernate.dialect.SQLServerDialect
                </prop>
                <prop key="show_sql">true</prop>
            </props>
        </property>
</bean>

 


注意:使用MyEclipse集成SSH时,org.apache.commons.dbcp.BasicDataSource所在的包commons-dbcp-1.2.2.jar不会默认加载,另外还需加载commons-pool-1.4.jar,两者均可在Apache网站commons项目下找到。否则运行程序会出现以下异常:

 

java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
……

 

2. Hibernate DAO开发


1) 使用Hibernate原生API实现DAO
  

A. 使用原生API实现DAO

 

public class UserInfoDAORaw implements IUserInfoDAO {
    private SessionFactory sessionFactory;
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    public List findAll() {
        return this.sessionFactory.getCurrentSession()
                                                               .createQuery("from UserInfo").list();
    }
部分代码省略……
}

 

 


B. 在applicationContext.xml配置原生DAO Bean 

 

<bean id="userInfoDAORaw" class="cn.qdqn.ssh.dao.UserInfoDAORaw">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
</bean>

 
C. 运行测试

 

 

 

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
UserInfoDAORaw dao=(UserInfoDAORaw)ctx.getBean("userInfoDAORaw");
List<UserInfo> list=dao.findAll();
for(UserInfo info : list){
        System.out.println(info.getUserName()+"-"+info.getUserPwd());
}

 

结论:使用Hibernate原生API实现DAO可以做到Hibernate和Spring完全分离,缺点是无法利用Spring封装Hibernate所提供的额外功能。

 


2)【最佳方案】使用Spring框架所提供的HibernateDaoSupport类实现DAO


A. 使用MyEclipse反向工程生成Spring 整合Hibernate 的DAO,该DAO继承自Spring的org.springframework.orm.hibernate3.support.HibernateDaoSupport 

 

public class UserInfoDAO extends HibernateDaoSupport {
    private static final Log log = LogFactory.getLog(UserInfoDAO.class);
    // property constants
    public static final String USER_NAME = "userName";
    public static final String USER_PWD = "userPwd";

    public void save(UserInfo transientInstance) {
        log.debug("saving UserInfo instance");
        try {
            getHibernateTemplate().save(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }
部分代码省略……
}

 

 

 

 

B. 在applicationContext.xml配置DAO Bean 

 

<bean id="userInfoDAO" class="cn.qdqn.ssh.dao.UserInfoDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
</bean>

 

C. 运行测试

 

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserInfoDAORaw dao = (UserInfoDAORaw)ctx.getBean("userInfoDAO");
List<UserInfo> list = dao.findAll();
for(UserInfo info : list) {
System.out.println(info.getUserName()+"-"+info.getUserPwd());
}

 
注意:HibernateDaoSupport通过getHibernateTemplate()方法得到HibernateTemplate实例进行保存、删除等操作,但是HibernateTemplate默认不进行事务处理,而在Hibernate中这些操作必须在事务下执行才能得到正确的结果,因此必须使用Spring声明式事务管理。

 

 


3. 使用Spring声明式事务管理

 

1) 使用Spring 1.x 的事务代理类进行事务管理


A. 在applicationContext.xml中声明事务管理器,注入sessionFactory属性

 

<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
</bean>

 

B. 在applicationContext.xml中使用Spring AOP代理方式实现声明式事务

 

<bean id="userInfoDAOProxy" class=
                                                        "org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <!--必须为true时CGLIB才不用强制编写DAO接口-->
        <property name="proxyTargetClass">
            <value>true</value>
        </property>
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        <property name="target">
            <ref bean="userInfoDAO"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
</bean>

 

 

 

分享到:
评论

相关推荐

    MyEclipse开发SSH2(Struts2+Spring+Hibernate)教程

    在深入探讨如何使用MyEclipse构建SSH2框架(Struts2 + Spring + Hibernate)之前,首要任务是确保开发环境的正确搭建。本教程推荐的环境配置为MyEclipse7.5,搭配Struts2.2.1版本,同时采用MyEclipse自带的Spring和...

    ssh框架实例过程(MyEclipse+struts+spring+hibernate整合)

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个实例是为初学者设计的,通过MyEclipse集成开发环境,详细介绍了如何将这三大框架整合到一个登录工程中。下面将详细...

    MyEclipse图文整合SSH,Struts2+Spring+Hibernate整合过程详解

    Struts2+Spring+Hibernate(SSH)框架的整合是Java Web开发中常见的一种技术组合,它们各自具有独特的优势,能够高效地处理Web应用程序中的模型、视图和控制,以及对象持久化和依赖注入。以下是对Struts2、Spring、...

    Myeclipse8.5下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3

    通过上述步骤,我们已经成功在MyEclipse 8.5环境下搭建了一个基于Struts2.1、Spring3.0以及Hibernate3.3的SSH框架。该框架为开发人员提供了一个良好的起点,用于构建复杂的企业级应用。此外,本文还列举了一些所需的...

    Eclipse + MyEclipse整合Struts+Spring+Hibernate简单例子开发

    标题 "Eclipse + MyEclipse整合Struts+Spring+Hibernate简单例子开发" 指向的是一个关于如何在集成开发环境Eclipse与MyEclipse中搭建Struts、Spring和Hibernate(SSH)框架的教程。SSH是Java Web开发中常用的一个...

    MyEclipse下struts2、spring、hibernate整合

    在开发Java Web应用程序时,整合...通过以上步骤,你就完成了在MyEclipse环境下对Struts2、Spring和Hibernate的整合,可以开始进行功能开发了。记得在开发过程中持续优化和调整配置,以提高应用的性能和可维护性。

    MyEclipse开发SSH2(Struts2+Spring+Hibernate)应用教程

    MyEclipse开发SSH2(Struts2+Spring+Hibernate)应用教程——根据软件工程原则简化实现的JSP+J2EE入门教程 摘要:SSH2(Struts2+Spring+Hibernate)是当前开发Java动态网站的流行框架。虽然其涉及的技术较为繁杂,...

    Myeclipse整合ssh实例

    本篇文章将详细介绍如何在MyEclipse开发环境中整合Struts、Spring和Hibernate(简称SSH)这三个流行的技术框架,以构建高效、可扩展的企业级应用。我们将通过一系列步骤,展示如何在MyEclipse中搭建SSH框架的基本...

    MyEclipse 搭建Struts2+Spring2+Hibernate3整合SSH2

    【SSH2整合详解】 ...通过以上步骤,你可以在MyEclipse中成功地搭建一个Struts2、Spring和Hibernate整合的项目,为后续的业务开发提供坚实的基础。记住,每个框架的配置都需要细心处理,以确保项目的稳定运行。

    手把手教你用Myeclipse新建SSH项目(spring,struts,hibernate).zip

    - `使用Myeclipse快速整合spring,struts,hibernate.doc`:这可能是一个详细的文档,指导如何在MyEclipse中一步步集成这三个框架。 - `5.1.自动生成Hibernate_ORM.gif`、`5.2.自动生成Hibernate_ORM_2.gif`:这些可能...

    Myeclipse-ssh整合

    MyEclipse作为一款强大的集成开发环境,提供了便捷的SSH整合支持。以下将详细介绍如何在MyEclipse中进行SSH的整合。 ### 一、项目构建 1. **创建Java EE 5.0项目** 在MyEclipse中,选择`New -&gt; Dynamic Web ...

    使用MyEclipse集成SSH和DWR【最佳方案】

    ### 使用MyEclipse集成SSH和DWR:最佳实践与详细步骤 #### 一、整合Spring与Struts 在本文档中,重点介绍了如何利用MyEclipse集成SSH(Struts + Spring + Hibernate)框架以及DWR(Direct Web Remoting),并且特别...

    MyEclipse开发SSH(Struts+Spring+Hibernate)入门

    MyEclipse开发SSH(Struts+Spring+Hibernate)入门,html文件,简述MyEclipse开发SSH

    SSH整合源码(Struts+Spring+Hibernate整合用户注册例子)

    SSH整合,全称为Struts、Spring和Hibernate的集成,是一种常见的Java Web开发框架组合,用于构建高效、可维护的企业级应用程序。在这个例子中,我们看到的是一个基于SSH的用户注册功能的实现,使用的开发工具是...

    Myeclipse集成SSH

    Myeclipse集成SSH:spring3 struts2 hibernate4 ,下载下来就可以直接用。删除一些没有用的jsp和java即可。项目中已导入json包,可以使用json,包括用ztree做了一棵树。

    MyEclipse开发SSH(Struts+Spring+Hibernate).doc

    SSH(Struts+Spring+Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。Struts提供了MVC(Model-View-Controller)架构,Spring则作为依赖注入(DI)和面向切面编程(AOP)容器,而...

    用MyEclipse搭建Struts+Spring+Hibernate框架(图文).doc

    标题与描述均指向了“用MyEclipse搭建Struts+Spring+Hibernate框架”的主题,这一文档旨在指导读者如何在MyEclipse环境下构建一个基于Struts、Spring和Hibernate的开发框架,通常被称为SSH(Struts-Spring-Hibernate...

    MyEclipse8.0 Struts2+Spring+Hibernate

    通过这种方式,MyEclipse8.0提供了强大的集成开发环境,使得开发者可以方便地整合Struts2、Spring和Hibernate,构建出高效、灵活的企业级应用。这个过程不仅涉及到技术的集成,也包括项目的结构设计和最佳实践的应用...

    myeclipse新建SSH项目的步骤struts2+spring+hibernate

    在IT行业中,SSH(Struts2 + Spring + Hibernate)是一个非常经典的Java Web开发框架组合,用于构建高效、可维护的企业级应用。这个框架集合了Struts2作为MVC(Model-View-Controller)架构的前端控制器,Spring作为...

Global site tag (gtag.js) - Google Analytics