`
mymobile
  • 浏览: 182235 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring2.5+Hibernate3.6+struts1.3整合(2)

阅读更多

接上篇:

(8)下面我们写一个业务Bean来操作实体:

     为了面向接口编程我们先创建一个接口:PersonService

    package com.java.service;

import java.util.List;

import com.java.entity.Person;

public interface PersonService {

    public abstract void save(Person person);

    public abstract void update(Person person);

    public abstract Person getPerson(Integer id);

    public abstract void delete(Integer id);

    public abstract List<Person> getPersons();

}

 然后创建这个接口的实现类并且配置事务和注入sessionFactory:

 package com.java.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.java.entity.Person;
import com.java.service.PersonService;
@Transactional
public class PersonServiceImpl implements PersonService {
    @Resource private SessionFactory sessionFactory;
    public void save(Person person){
        sessionFactory.getCurrentSession().persist(person);
    }
    public void update(Person person){
        sessionFactory.getCurrentSession().merge(person);
    }
    @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
    public Person getPerson(Integer id){
        return (Person)sessionFactory.getCurrentSession().get(Person.class, id);
    }
    public void delete(Integer id){
        sessionFactory.getCurrentSession().delete(
                sessionFactory.getCurrentSession().load(Person.class, id));
    }
    @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
    @SuppressWarnings("unchecked")
    public List<Person> getPersons(){
        return sessionFactory.getCurrentSession().createQuery("FROM Person").list();
    }
}
备注:上面的sessionFactory 应用了@Resource,把SessionFactory实例注入给sessionFactory。

       Transactional表示在操作该类时,需要事务管理。

    另外在查询数据时应该用只读事务,这样可以提高性能:

   @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)。

(9)最后我们对这个类创建单元测试(Junit):因为在单元测试中需要获取PersonServiceImpl实例,所以还需要在beans.xml文件中配置如下:

<bean id="personService " class="com.java.service.impl.PersonServiceImpl"/>

下面把完整的spring配置文件复制如下:

 

<?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"
       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/context http://www.springframework.org/schema/context/spring-context-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">
     <!-- 打开利用注解方式依赖注入 -->
     <context:annotation-config/>
     <!-- 连接池的配置 -->
     <bean id="dataSource " class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
         <!-- 连接池启动时的初始值 -->
         <property name="initialSize" value="1"/>
         <!-- 连接池的最大值 -->
         <property name="maxActive" value="500"/>
         <!-- 最大空闲值 -->
         <property name="maxIdle" value="2"/>
         <!--  最小空闲值. -->
         <property name="minIdle" value="1"/>
      </bean>
    <!-- 配置sessionFactory -->
    <bean id="sessionFactory " class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
         <property name="dataSource" ref="dataSource "/>
         <property name="mappingResources ">
            <list>
              <value>com/java/entity/Person.hbm.xml</value>
            </list>
         </property>
         <property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.OracleDialect
                hibernate.hbm2ddl.auto=update
                <!-- 测试阶段使用 -->
                hibernate.show_sql=true
                hibernate.format_sql=true
              </value>
         </property>
    </bean>
    <!-- 配置事务管理 -->
    <bean id="txManager " class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          <property name="sessionFactory" ref="sessionFactory "/>
    </bean>
    <!-- 基于注解方式 -->
    <tx:annotation-driven transaction-manager="txManager "/>
    <bean id="personService " class="com.java.service.impl.PersonServiceImpl"/>
</beans>

 

 

====================================

   package com.java.junit;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.java.entity.Person;
import com.java.service.PersonService;

public class PersonTest {
    private static PersonService personService;
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        try {
            ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml" );
            personService=(PersonService)ctx.getBean("personService ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testSave() {
        personService.save(new Person("oracle"));
    }

    @Test
    public void testUpdate() {
        Person person=personService.getPerson(41);
        person.setName("oracle41");
        personService.update(person);
    }

    @Test
    public void testGetPerson() {
        Person person=personService.getPerson(42);
        System.out.println(person.getId()+"-->"+person.getName());
    }

    @Test
    public void testDelete() {
        personService.delete(43);
    }

    @Test
    public void testGetPersons() {
        List<Person> persons=personService.getPersons();
        for(Person person:persons){
            System.out.println(person.getId()+"-->"+person.getName());
        }
    }

}
接下来运行单元测试,测试完成,没有出错的话我们基本上就完成了spring+hibernate的整合了。

 

 

 

0
3
分享到:
评论

相关推荐

    spring3.0+hibernate3.6+struts2.38整合包加配置文件下载

    标题中的"spring3.0+hibernate3.6+struts2.38整合包加配置文件下载"指的是一个包含三个关键Java EE框架——Spring 3.0、Hibernate 3.6和Struts 2.38的集成开发环境。这个整合包是为了简化开发者在搭建基于这些技术的...

    CXF2.7+SPRING3.0.5+HIBERNATE3.6final+STRUTS2

    标题中的"CXF2.7+SPRING3.0.5+HIBERNATE3.6final+STRUTS2"代表了一个集成开发环境,其中包含了四个关键的技术框架:Apache CXF 2.7、Spring 3.0.5、Hibernate 3.6 Final以及Struts2。这些框架在Java Web开发中起着...

    Spring2.5+Struts2.3+hibernate3.6 整合实现登陆的实例

    SSH框架整合是Java Web开发中常见的一种技术组合,由Spring、Struts2和Hibernate三个开源框架构成,分别负责控制层、表现层和持久层的管理。这个实例是基于Spring 2.5、Struts2.3和Hibernate 3.6进行集成,用于实现...

    spring 3.0.4 +hibernate3.6+mybatis3.0.4+struts 2.1.8+freemark整合

    标题 "spring 3.0.4 + hibernate3.6 + mybatis3.0.4 + struts 2.1.8 + freemarker 整合" 描述了一个经典的Java Web开发集成框架,用于构建高效、可扩展的Web应用程序。这个组合在过去的几年里非常流行,因为它将多个...

    (第三版)轻量级Java+EE企业应用实战:Struts2.2+Spring3.0+Hibernate3.6整合开发详解

    csdn只能上传50MB的,不够用,我上传的是网盘的下载地址,包含PDF和源码,PDF是226MB的清晰完整版,源码也是完整的。 附:源码使用方式,看到有.project的的,可以直接通过import导到myeclipse里面,没有这个文件的...

    struts2.2+spring3+hibernate3.6

    Struts2、Spring3和Hibernate3.6是Java开发中非常经典的三大框架组合,它们各自在Web应用开发中承担着不同的职责,共同构建了一个高效、灵活的企业级应用开发环境。 Struts2作为MVC(Model-View-Controller)架构的...

    struts2.2+spring3.05+hibernate3.6整合

    在"struts2.2+spring3.05+hibernate3.6整合"项目中,我们将看到如何将这三个框架协同工作,实现一个基于MySQL数据库的应用程序。Struts2.2版本提供了更好的Action类支持和拦截器功能,Spring3.05加强了AOP(面向切面...

    Spring 3.0+Hibernate 3.6+Struts2.2.1详解

    在本项目中,我们探讨了如何整合Spring 3.0、Hibernate 3.6和Struts2.2.1这三大框架,以构建一个高效、灵活的企业级Web应用程序。这三者结合,提供了模型-视图-控制器(MVC)架构、持久层管理和AOP(面向切面编程)...

    Struts2.3+Spring3.1+Hibernate3.6整合的jar包(全)

    Struts2.3、Spring3.1和Hibernate3.6是三个非常重要的Java Web开发框架,它们的整合在企业级应用开发中极为常见。这个压缩包"Struts2.3+Spring3.1+Hibernate3.6整合的jar包(全)"包含了进行SSH整合所需的全部依赖库,...

    jbpm4.4+spring2.5.6+hibernate 3.6+struts2.2.1 集成 保证运行成功

    SSHJ (Spring、Struts2、Hibernate 和 jBPM) 是一个经典的 Java 开发框架组合,用于构建企业级的 Web 应用程序。这个集成项目是基于特定版本的这些技术,包括jbpm4.4(业务流程管理),spring2.5.6(依赖注入和事务...

    学生管理系统SSH(Struts2+Spring3.1+Hibernate3.6)

    笔者开发时所用到的软件: apache-tomcat-7.0.25.exe eclipse-jee-indigo-SR2-win32.zip mysql-5.5.20-win32.msi navicat100_mysql_en.zip ...适合于初学Struts2+Spring+Hibernate的开发人员参考学习。

    轻量级java ee企业应用实战(第3版)—struts2+spring3+hibernate3.6整合开发

    学习JEEE的经典教材,由李刚老师编著,这是最新的第三版,第3版保持了第2版内容全面、深入的特点,主要完成全部知识的升级。该书在2011年2月由电子工业出版社出版 由于上传文件大小限制本书被压缩为四个部分,此附件...

    struts2.3+spring3.1+hibernate3.6整合jar包

    本整合包"struts2.3+spring3.1+hibernate3.6"提供了这三大框架的最新版本,便于开发者进行快速开发。 Struts2是MVC(Model-View-Controller)架构的实现,主要负责处理HTTP请求,提供了一种组织业务逻辑和表现层的...

    Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)

    Struts2.2、Spring3.1和Hibernate3.6是经典的Java企业级开发框架组合,常被用于构建高效、可扩展的Web应用程序。这个整合示例提供了登录功能以及基本的CRUD(创建、读取、更新、删除)操作,帮助开发者理解如何将这...

    EXt2.1+sturts2.0+spring2.5+hibernate

    EXT JS 2.1负责前端交互和UI展示,Struts 2.0作为MVC框架处理HTTP请求和业务逻辑,Spring 2.5提供依赖注入和事务管理,以及与Struts 2和Hibernate的整合,而Hibernate则处理数据持久化,实现了对象和数据库表之间的...

    struts2.2.1+spring 3.0.3+hibernate3.6+dwr3.0全注解整合包

    这个"struts2.2.1+spring 3.0.3+hibernate3.6+dwr3.0全注解整合包"是将这些框架结合在一起,使用注解方式配置,简化了传统的XML配置文件,提高了开发效率和代码的可读性。以下是关于这四个框架及其整合的知识点: 1...

    sturts2.3.15.1+Spring3.2+hibernate3.6整合

    标题中的"sturts2.3.15.1+Spring3.2+hibernate3.6整合"指的是在Web开发中使用Struts2、Spring和Hibernate这三种技术进行集成开发的一个项目版本配置。SSH(Struts2、Spring、Hibernate)是Java企业级应用中常见的...

Global site tag (gtag.js) - Google Analytics