`
zhangjingqiang
  • 浏览: 72024 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

Struts2.1+Spring3.0+JPA1.0(Hibernate3.3实现)例子

    博客分类:
  • Java
阅读更多

本文代码是传智播客黎活明老师所讲的《Spring2.5视频教程》各种示例的综合,在此把所有框架升级到最新版本整合一下。

 

所用jar包:

 

Struts:

struts-2.1.8.1

\lib下除了各种plugin(保留struts2-spring-plugin-2.1.8.1.jar)的所有文件

 

Spring:

spring-framework-3.0.0.RELEASE

\dist下的所有文件

 

Hibernate:

hibernate-distribution-3.3.2.GA下的hibernate3.jar

\lib\bytecode\cglib下的cglib-2.2.jar

\lib\optional\ehcache下的ehcache-1.2.3.jar

\lib\required下的所有文件

hibernate-annotations-3.4.0.GA下的hibernate-annotations.jar

\lib下的ejb3-persistence.jar,hibernate-commons-annotations.jar

hibernate-entitymanager-3.4.0.GA下的hibernate-entitymanager.jar

\lib\test下的log4j.jar,slf4j-log4j12.jar

 

MySQL:mysql-connector-java-5.1.10-bin.jar

 

JUnit:4

JDK:jdk-6u14-windows-i586.exe

Tomcat:apache-tomcat-6.0.18.zip

 

项目名:test

Person.java

package com.test.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
@Entity
public class Person implements Serializable {
	private Integer id;
	private String name;
	
	public Person(){}
	
	public Person(String name){
		this.name = name;
	}
	
	@Id @GeneratedValue
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(length=10,nullable=false)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Person other = (Person) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
}

 PersonService.java

package com.test.service;

import java.util.List;

import com.test.bean.Person;

public interface PersonService {
	
	public void save(Person person);
	
	public void update(Person person);
	
	public void delete(Integer personid);
	
	public Person getPerson(Integer personid);
	
	@SuppressWarnings("unchecked")
	public List<Person> getPersons();
	
}

 PersonServiceBean.java

package com.test.service.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.exception.SQLGrammarException;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.test.bean.Person;
import com.test.service.PersonService;

@Transactional
public class PersonServiceBean implements PersonService {

	@PersistenceContext EntityManager em;

	public void delete(Integer personid) {
		em.remove(em.getReference(Person.class, personid));

	}

	@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
	public Person getPerson(Integer personid) {
		return em.find(Person.class, personid);
		
	}

	@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
	@SuppressWarnings("unchecked")
	public List<Person> getPersons() throws SQLGrammarException {
		return em.createQuery("select o from Person o").getResultList();
		
	}

	public void save(Person person) {
		em.persist(person);

	}

	public void update(Person person) {
		em.merge(person);

	}

}

 PersonAction.java

package com.test.web.action;

import java.util.List;

import javax.annotation.Resource;

import com.test.bean.Person;
import com.test.service.PersonService;

public class PersonAction {
	@Resource PersonService personService;
	private String message;
	private List<Person> persons;
	private Person person;
	
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	/**
	 * 人员列表显示
	 */
	public String list(){
		this.persons = personService.getPersons();
		return "list";
	}
	/**
	 * 人员添加界面
	 */
	public String addUI(){
		return "add";
	}
	/**
	 * 人员添加
	 */
	public String add(){
		this.personService.save(this.person);
		this.message="添加成功";
		return "message";
	}
	public List<Person> getPersons() {
		return persons;
	}

	public void setPersons(List<Person> persons) {
		this.persons = persons;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
}

PersonServiceTest.java

package junit.test;

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.test.bean.Person;
import com.test.service.PersonService;

public class PersonServiceTest {
	private static PersonService personService;

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

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

	@Test
	public void testUpdate() {
		Person person = personService.getPerson(1);
		person.setName("小丽");
		personService.update(person);
	}

	@Test
	public void testGetPerson() {
		Person person = personService.getPerson(2);
		System.out.println(person.getName());
		try {
			System.out.println("请关闭数据库");
			Thread.sleep(1000 * 15);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("第二次开始获取");
		person = personService.getPerson(2);
		System.out.println(person.getName());
	}

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

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

} 

META-INF\persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
  <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
      <properties>
      	<!-- 数据库方言-->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
		<!-- 数据库驱动 -->
        <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>
		<!-- 数据库用户名 -->
        <property name="hibernate.connection.username" value="root"/>
		<!-- 数据库密码 -->
        <property name="hibernate.connection.password" value="1234"/>
		<!-- 数据库连接URL -->
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
		<!-- 最大抓取深度 -->
        <property name="hibernate.max_fetch_depth" value="3"/>
		<!-- 更新方式创建库表 -->
        <property name="hibernate.hbm2ddl.auto" value="update"/>
		<!-- 显示SQL -->
		<property name="hibernate.show_sql" value="true"/>
		<!-- 格式SQL -->
		<property name="hibernate.format_sql" value="true"/>
		<!-- 使用二级缓存 -->
		<property name="hibernate.cache.use_second_level_cache" value="true"/>
		<property name="hibernate.cache.use_query_cache" value="false"/>
		<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
      </properties>
  </persistence-unit>
</persistence>

 src\beans.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"
       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-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
	<context:annotation-config/>
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
      <property name="persistenceUnitName" value="test"/>
    </bean>
    <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  	  <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>
 	<tx:annotation-driven transaction-manager="txManager"/>
	<bean id="personService" class="com.test.service.impl.PersonServiceBean"/>
	<bean id="personAction" scope="prototype" class="com.test.web.action.PersonAction" />
</beans>

 src\ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
     defaultCache节点为缺省的缓存策略
     maxElementsInMemory 内存中最大允许存在的对象数量
     eternal 设置缓存中的对象是否永远不过期
     overflowToDisk 把溢出的对象存放到硬盘上
     timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉
     timeToLiveSeconds 指定缓存对象总的存活时间
     diskPersistent 当jvm结束是是否持久化对象
     diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间
 -->
<ehcache>
    <diskStore path="C:\cache"/>
    <defaultCache maxElementsInMemory="1000" eternal="false" overflowToDisk="true"
        timeToIdleSeconds="120"
        timeToLiveSeconds="180"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="60"/>
	<cache name="com.test.bean.Person" maxElementsInMemory="100" eternal="false" 
	overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/>
</ehcache>

src\struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
    	如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
    <constant name="struts.action.extension" value="do"/>
    <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
    <constant name="struts.serve.static.browserCache" value="false"/>
    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="true" />
     <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <constant name="struts.objectFactory" value="spring" />
    
 	<package name="person" extends="struts-default">
 		<global-results>
 			<result name="message">/page/message.jsp</result>
 		</global-results>
		
		<action name="action_*" class="personAction" method="{1}">
			<result name="list">page/personlist.jsp</result>
			<result name="add">page/addperson.jsp</result>
		</action>
		
    </package>
</struts>

 WebContent\page\addperson.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>人员添加</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   	<s:form action="action_add" namespace="/person">
   		名称:<s:textfield name="person.name"/>
   		<input type="submit" value="提交"/>
   	</s:form>
  </body>
</html>

  WebContent\page\message.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'message.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <s:property value="message"/> <br>
    <a href="../index.jsp">返回</a>
  </body>
</html>

  WebContent\page\personlist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>人员列表</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   <s:iterator value="persons">
   	id=<s:property value="id"/>,name=<s:property value="name"/><br>
   </s:iterator>
   <a href="page/addperson.jsp">添加</a>
  </body>
</html>

  WebContent\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>test</display-name>
  
  <context-param>
	   <param-name>contextConfigLocation</param-name>
	   <param-value>classpath:beans.xml</param-value>
	</context-param>
	<!-- 对Spring容器进行实例化 -->
	<listener>
	      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter>
	        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
	        <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
	 </filter>
	 <filter-mapping>
	        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
	        <url-pattern>/*</url-pattern>
	 </filter-mapping>
	 
	 <!-- Struts2 Configuration Begin -->
	<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
   </filter-mapping>
	<!-- Struts2 Configuration End -->
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 WebContent\index.jsp

<% response.sendRedirect("action_list.do"); %>
分享到:
评论
1 楼 greatwqs 2010-04-22  
提供一个下载的例子岂不是更好?

相关推荐

    搭建Struts2.1+Spring3.0+Hibernate3.3框架

    搭建Struts2.1+Spring3.0+Hibernate3.3框架是开发Java Web应用程序时常见的一种技术组合,也被称为SSH框架。这三个框架分别负责不同的职责:Struts2处理前端控制器,Spring提供依赖注入和事务管理,Hibernate则作为...

    spring3.0+struts2.2+hibernate3.3集成.rar

    标题 "spring3.0+struts2.2+hibernate3.3集成.rar" 提供了一个关于企业级Java应用开发的集成框架的信息。描述中同样强调了这个主题,暗示了压缩包内可能包含了一个演示或教程,讲解如何将这三个流行的技术——Spring...

    struts2.1+spring2.5+hibernate3.0+mysql

    SSH2则是Struts2、Spring2.5和Hibernate3.0的集成版本,这是一套非常经典的后端技术栈,用于构建高效、灵活的企业级应用程序。在本示例中,SSH2与MySQL数据库结合,为开发者提供了一个完整的MVC(模型-视图-控制器)...

    Struts2.1、Spring3.0、Hibernate3.3框架整合源码

    Struts2.1、Spring3.0和Hibernate3.3是经典的Java Web开发框架组合,它们在企业级应用中广泛使用。这个压缩包文件可能是为了演示或教学这三大框架的整合,以及如何与MySQL数据库进行交互。下面我们将深入探讨这三个...

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

    本教程将探讨如何将Struts2.1、Spring2.5和Hibernate3.3这三大流行框架进行整合,以构建一个强大的Java Web应用程序。首先,我们先关注Spring2.5与Hibernate3.3的整合,这是整个集成的第一步。 Spring2.5是Spring...

    Struts2+Spring2.0+JPA(Hibernate3.3)实例

    Struts2、Spring 2.0 和 JPA(基于Hibernate 3.3)是Java Web开发中的三个关键组件,它们的整合提供了强大的企业级应用框架。这篇文章将详细讲解这三个技术的集成过程及其在实际项目中的应用。 首先,Struts2 是一...

    struts1.0+spring3.0+hibernte3.2

    Struts1.0是MVC(Model-View-Controller)架构的一个实现,Spring3.0是全面的轻量级应用框架,而Hibernate3.2则是一个强大的对象关系映射(ORM)工具。 **Struts1.0** 是最早的Struts版本之一,它提供了一个用于...

    SSH整合 Struts2.1+Spring4.1+Hibernate4.1

    这个“SSH整合 Struts2.1+Spring4.1+Hibernate4.1”是一个预配置的框架模板,适用于快速开发J2EE项目,特别是对于那些需要管理业务逻辑和持久层操作的复杂应用。 Struts2是MVC(模型-视图-控制器)架构的扩展,提供...

    jqueryvalidate(猫冬)+spring3.0+struts2.18+hibernate3整合资源包

    该资源包是一个集成开发环境下的项目模板,主要涵盖了jQuery Validate、Spring 3.0、Struts 2.18和Hibernate 3这四个关键组件,它们是Java Web开发中的常用框架和技术。以下将分别对这些技术进行详细阐述。 **...

    Struts2.1.8+Hibernate3.3+Spring3.0整合所.rar.rar

    Struts2.1.8+Hibernate3.3+Spring3.0整合是一个常见的Java企业级应用开发模式,这种集成框架的使用旨在优化后端服务,提高开发效率,并提供灵活的数据持久化解决方案。以下是对这个集成知识点的详细说明: **Struts...

    Struts2.0+Spring3.0+hibernate3.2 API(参考手册)

    Struts2.0、Spring3.0和Hibernate3.2是经典的Java企业级开发框架组合,通常被称为SSH(Struts2、Spring、Hibernate)架构。这个API参考手册提供了这三个框架的核心概念、用法和功能的详细说明。 Struts2.0是MVC...

    struts2.1.8+JPA3.0(hibernate实现)+spring2.5整合jar

    Struts2.1.8、JPA3.0(Hibernate实现)和Spring2.5是三个重要的Java开发框架,它们的整合为构建大型企业级应用提供了强大的支持。在这个压缩包中,包含了这些框架的核心库和其他相关依赖,方便开发者快速集成到自己...

    struts2.1+spring2.5+hibernate3.2项目基本jar包

    这个“struts2.1+spring2.5+hibernate3.2项目基本jar包”集合了这三个框架的核心库,为开发者提供了便捷的开发环境。 **Struts2** 是一个基于MVC设计模式的Web应用程序框架,主要用于控制应用程序的流程。Struts2.1...

    struts2.0+Spring3.0实例

    Spring3.0增强了对JSR-303(Java Bean Validation)的支持,改进了XML配置的简化,以及提供了更多的数据访问选项,如JPA和Hibernate。 Struts2.0与Spring3.0的集成,可以利用Spring的IoC容器来管理Struts2的Action...

    巴巴运动网S2SH版(1)(struts2.3+hibernate3.0+spring3.0)

    2.本程序为闲暇之余改写,暂时定为(1),在原来struts1+jpa+spring的基础上转为struts2+hibernate+spring版本; 3.因为是抽时间写的,所以不完善,问题是肯定存在的,望大家见谅; 4.目前只写了一个后台的产品管理...

    jquery easy UI+spring3.0+struts2.1.8.1+hibernate3.5整合的CRM包括所有Jar包

    这个压缩包"jquery easy UI+spring3.0+struts2.1.8.1+hibernate3.5整合的CRM包括所有Jar包"提供了一种基于Java的技术栈,用于构建客户关系管理(CRM)系统。下面将详细介绍这些组件以及它们之间的整合方式。 首先,...

    Struts 2.1 + Spring 2.0.8 + Hibernate 3.1.rar

    Struts 2.1、Spring 2.0.8 和 Hibernate 3.1 是三个非常重要的Java企业级开发框架,它们在2000年代末到2010年代初广泛应用于构建大型Web应用程序。这个压缩包文件组合了这三个框架的特定版本,旨在提供一个集成的...

    Struts2.1.8+Hibernate3.3+Spring3.0整合所需Jar包

    Struts2.1.8、Hibernate3.3和Spring3.0是这三大框架的某一特定版本组合,每个版本都有其特定的特性和改进。 **Struts2.1.8**: - Struts2.1.8是Struts2的一个稳定版本,提供了更丰富的UI组件和拦截器。 - 它引入了...

    spring2.5+struts2.0+hibernate3.0例子 下载

    这个"Spring2.5+Struts2.0+Hibernate3.0例子"的压缩包文件,很可能是为了展示如何将这三个框架集成在一起,实现数据持久化、业务逻辑控制和视图呈现的无缝配合。开发者通常会在这个例子中找到配置文件(如web.xml、...

Global site tag (gtag.js) - Google Analytics