Spring4+Struts2+Hibernate 搭建示例

SSH的框架一度在JAVA企业应用中占有很高的比例,几年前也用SSH做过一些网站及应用服务接口相关的项目。最近在整理一些之前的工作,所以简单回顾一下。用下面的例子算是做个学习笔记吧。

1. 引言

每种框架都有其自身的优势和不足,这和框架本身的设计初衷以及后来的发展,包括社区支持等等各种因素相关。Anyway,现在越来越多的人认同Spring似乎提供了更好和更广的功能性选择。不过还是有一些因素,导致需要去学习或者使用Struts,比如:

1)你所在公司的一些老项目是使用Struts开发的,很不幸,你需要去维护他们

2)其他一些因素,你需要学习,比如架构选择的需要,或者和其他系统的对接等需要

3)或者你如果应聘一个架构师或者高级开发的岗位,常常有人会问你,讲讲struts 和 Spring的区别吧。。。


2. 设置基础环境

1)安装JDK,这是PATH

2)安装应用服务器,如Tomcat

3)安装构建工具,如 Maven

4)在IDE(如Eclipse或IDEA)的偏好设置中,设置应用服务器和构建工具的路径

5)设置示例程序所需的数据库,如

CREATE DATABASE `leedb`;
 
CREATE TABLE `product` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `description` varchar(512) NOT NULL,
  `price` float NOT NULL,
  PRIMARY KEY (`product_id`)
)

3. 使用构建工具添加相关依赖

1)创建一个 MAVEN web-app  类型项目

2)在 pom.xml 中添加如下内容


  4.0.0
  com.leelei
  SSHDemo
  war
  1.0
  SSHDemo
  
  
    1.8
    4.1.6.RELEASE
    2.3.20
    4.3.8.Final
    5.1.34
  

  
  	
  	
    	org.springframework
    	spring-context
    	${org.springframework-version}
	
 
	
    	org.springframework
    	spring-context-support
    	${org.springframework-version}
	
 
	
    	org.springframework
    	spring-orm
    	${org.springframework-version}
    	jar
    	compile
	
	
	
	
    	org.apache.struts
    	struts2-core
    	${org.strutsframework-version}
	
 
	
    	org.apache.struts
    	struts2-spring-plugin
    	${org.strutsframework-version}
	
	
	
    	org.hibernate
    	hibernate-core
    	${org.hibernateframework-version}
	
	
	
    	org.apache.commons
   	 	commons-dbcp2
    	2.0
	
	
	
    	mysql
    	mysql-connector-java
    	${org.mysqlconnector-version}
	
	
    
      junit
      junit
      3.8.1
      test
    
  
  
  
		src
		
			
				maven-compiler-plugin
				3.3
				
					1.8
					1.8
				
			
			
				maven-war-plugin
				2.4
				
					webapp
					false
				
			
		
	

4. 相关代码

1)Model和Mapping 

在src/main/java下添加package,如 com.leelei.model, 然后新建一个 JAVA class 文件 Product.java 

package com.leelei.model;

public class Product {
    private long id;
    private String name;
    private String description;
    private float price;
 
    public long getId() {
        return id;
    }
 
    public void setId(long id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public float getPrice() {
        return price;
    }
 
    public void setPrice(float price) {
        this.price = price;
    }
}
创建对应的Mapper文件, Product.hbm.xml




    
        
            
        
        
        
        
     

2)DAO文件

创建package com.leelei.dao

package com.leelei.dao;

import java.util.List;

import com.leelei.model.Product;
 
public interface ProductDAO {
    List list();
}
 dao的实现文件

package com.leelei.dao;

import java.util.List;
import javax.transaction.Transactional;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import com.leelei.model.Product;
 
public class ProductDAOImpl implements ProductDAO {
    private SessionFactory sessionFactory;
 
    public ProductDAOImpl(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
 
    @Override
    @Transactional
    public List list() {
        @SuppressWarnings("unchecked")
        List listProduct = (List)
            sessionFactory.getCurrentSession().createCriteria(Product.class)
                .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
                .list();
        return listProduct;
    }
}


3)Action

package com.leelei.action;

import java.util.List;

import com.leelei.dao.ProductDAO;
import com.leelei.model.Product;
 
import com.opensymphony.xwork2.ActionSupport;
 
public class ListProductAction extends ActionSupport {
    private ProductDAO productDAO;
    private List listProduct;
 
    public void setProductDAO(ProductDAO productDAO) {
        this.productDAO = productDAO;
    }
 
    public String execute() {
        listProduct = productDAO.list();
        return SUCCESS;
    }
 
    public List getListProduct() {
        return listProduct;
    }
}

execute()调用ProductDAO(通过getListProduct())来获取产品信息列表以用于视图显示。Spring通过setter方法(setProductDAO())注入一个ProductDAO的实例。

4)创建视图文件

在WEB-INF/ 创建文件夹 views, 添加 ProductList.jsp 文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>   




Product List


    
No Product Name Description Price

5)配置web.xml



     
    SSHDemo
     
    
        contextConfigLocation
        /WEB-INF/spring/appContext.xml
    
 
    
        org.springframework.web.context.ContextLoaderListener
    
 
    
        DispatcherFilter
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    
 
    
        DispatcherFilter
        /*
    
这里,我们将Struts配置成一个请求转发器,将Spring用作上下文监听器来管理Beans和依赖注入。

6)HIbernate配置文件

在代码根目录下 src\main\java 添加文件 hibernate.cfg.xml




       
  
    org.hibernate.dialect.MySQLDialect
    true 
    
  


在这里简单地通过 dialect来链接MySQL,并告诉它指定的MAPPER文件


在同样目录下,添加文件 struts.xml



 

    
         
        
            /WEB-INF/views/ProductList.jsp
        
         
    
定义一个动作匹配来处理 URL  /listProduct 请求。注意动作类现在被指向一个Spring管理的名为 -listProductActionBean 的 Bean。我们也配置了SUCCESS视图指向ProductList.jsp 页面。

7)Spring配置文件



 
    
        
    
 
    
        
            
        
    
 
    
        
        
    
     
    
        
        
        
        
    
 
    
     
    
        
    

定义一个Struts Action : listProductActionBean, productDAO bean被声明和注入 这个Action。
productDAO需要一个SessionFactory,所以我们定义一个。SessionFactory需要一个DataSource,所以我们定义一个DS(包括一些链接数据的参数)
最后我们定义个事务管理器。

8)最终文件结构

Spring4+Struts2+Hibernate 搭建示例_第1张图片


5. 参考

http://www.codejava.net/frameworks/struts/struts-2-spring-4-hibernate-4-integration-tutorial-part-1-xml-configuration

根据以上文章翻译整理





你可能感兴趣的:(学习笔记)