Struts 2 + Spring + Hibernate集成示例_cyan20115的博客-程序员秘密

技术标签: java  数据库  设计模式  

下载它– Struts2-Spring-Hibernate-Integration-Example.zip

在本教程中,它显示了“ Struts2 + Spring + Hibernate ”之间的集成。 在继续之前,请确保检查以下教程。

  1. Struts 2 + Hibernate集成示例
  2. Struts 2 + Spring集成示例
  3. Struts 1.x + Spring + Hibernate集成示例

请参阅集成步骤摘要:

  1. 获取所有依赖库(很多)。
  2. 注册Spring的ContextLoaderListener以集成Struts 2和Spring。
  3. 使用Spring的LocalSessionFactoryBean集成Spring和Hibernate。
  4. 完成,所有连接。

见关系:

Struts 2 <-- (ContextLoaderListener) --> Spring <-- (LocalSessionFactoryBean) --> Hibernate

这将是一个很长的教程,几乎没有说明,请确保您查看了以上3篇文章以了解详细说明。

教程开始…

它将创建一个带有添加客户和列出客户功能的客户页面。 前端使用Struts 2进行显示, Spring作为依赖项注入引擎, Hibernate进行数据库操作。 开始...

1.项目结构

项目文件夹结构。

Struts2 Spring Hibernate Project Structure
Struts2 Spring Hibernate Project Structure

2. MySQL表脚本

客户的表脚本。

DROP TABLE IF EXISTS `mkyong`.`customer`;
CREATE TABLE  `mkyong`.`customer` (
  `CUSTOMER_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(45) NOT NULL,
  `ADDRESS` varchar(255) NOT NULL,
  `CREATED_DATE` datetime NOT NULL,
  PRIMARY KEY (`CUSTOMER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

3,依赖库

本教程要求许多依赖库。

Struts2…

<!-- Struts 2 -->
        <dependency>
	    <groupId>org.apache.struts</groupId>
	    <artifactId>struts2-core</artifactId>
	    <version>2.1.8</version>
        </dependency>
	<!-- Struts 2 + Spring plugins -->
	<dependency>
            <groupId>org.apache.struts</groupId>
	    <artifactId>struts2-spring-plugin</artifactId>
	    <version>2.1.8</version>
        </dependency>

MySQL…

<!-- MySQL database driver -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.9</version>
	</dependency>

弹簧…

<!-- Spring framework --> 
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring</artifactId>
		<version>2.5.6</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>2.5.6</version>
	</dependency>

休眠中...

<!-- Hibernate core -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate</artifactId>
		<version>3.2.7.ga</version>
	</dependency>

	<!-- Hibernate core library dependency start -->
	<dependency>
		<groupId>dom4j</groupId>
		<artifactId>dom4j</artifactId>
		<version>1.6.1</version>
	</dependency>

	<dependency>
		<groupId>commons-logging</groupId>
		<artifactId>commons-logging</artifactId>
		<version>1.1.1</version>
	</dependency>

	<dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>3.2.1</version>
	</dependency>

	<dependency>
		<groupId>cglib</groupId>
		<artifactId>cglib</artifactId>
		<version>2.2</version>
	</dependency>
	<!-- Hibernate core library dependency end -->

	<!-- Hibernate query library dependency start -->
	<dependency>
		<groupId>antlr</groupId>
		<artifactId>antlr</artifactId>
		<version>2.7.7</version>
	</dependency>
	<!-- Hibernate query library dependency end -->

4.休眠中...

只需要模型和映射文件,因为Spring将处理Hibernate配置。

Customer.java –为客户表创建一个类。

package com.mkyong.customer.model;

import java.util.Date;

public class Customer implements java.io.Serializable {

	private Long customerId;
	private String name;
	private String address;
	private Date createdDate;

	//getter and setter methods
}

Customer.hbm.xml客户的休眠映射文件。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Julai 2010 11:40:18 AM by Hibernate Tools 3.2.5.Beta -->
<hibernate-mapping>
    <class name="com.mkyong.customer.model.Customer" 
		table="customer" catalog="mkyong">
        <id name="customerId" type="java.lang.Long">
            <column name="CUSTOMER_ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="45" not-null="true" />
        </property>
        <property name="address" type="string">
            <column name="ADDRESS" not-null="true" />
        </property>
        <property name="createdDate" type="timestamp">
            <column name="CREATED_DATE" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

5. Struts 2…

实现Bo和DAO设计模式。 在Spring bean配置文件中,所有的Bo和DAO都将由Spring进行DI。 在DAO中,使其扩展Spring的HibernateDaoSupport以集成Spring和Hibernate集成。

CustomerBo.java

package com.mkyong.customer.bo;

import java.util.List;
import com.mkyong.customer.model.Customer;
 
public interface CustomerBo{
	
	void addCustomer(Customer customer);
	List<Customer> listCustomer();
	
}

CustomerBoImpl.java

package com.mkyong.customer.bo.impl;

import java.util.List;
import com.mkyong.customer.bo.CustomerBo;
import com.mkyong.customer.dao.CustomerDAO;
import com.mkyong.customer.model.Customer;
 
public class CustomerBoImpl implements CustomerBo{
	
	CustomerDAO customerDAO;
	//DI via Spring
	public void setCustomerDAO(CustomerDAO customerDAO) {
		this.customerDAO = customerDAO;
	}

	//call DAO to save customer
	public void addCustomer(Customer customer){
		customerDAO.addCustomer(customer);
	}
	
	//call DAO to return customers
	public List<Customer> listCustomer(){
		return customerDAO.listCustomer();
	}
}

CustomerDAO.java

package com.mkyong.customer.dao;

import java.util.List;
import com.mkyong.customer.model.Customer;
 
public interface CustomerDAO{
	
	void addCustomer(Customer customer);
	List<Customer> listCustomer();	
	
}

CustomerDAOImpl.java

package com.mkyong.customer.dao.impl;

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.mkyong.customer.dao.CustomerDAO;
import com.mkyong.customer.model.Customer;
 
public class CustomerDAOImpl extends HibernateDaoSupport 
    implements CustomerDAO{
	
	//add the customer
	public void addCustomer(Customer customer){
		getHibernateTemplate().save(customer);
	}
	
	//return all the customers in list
	public List<Customer> listCustomer(){
		return getHibernateTemplate().find("from Customer");		
	}
	
}

CustomerAction.java – Struts2操作不再需要扩展ActionSupport ,Spring会处理它。

package com.mkyong.customer.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.mkyong.customer.bo.CustomerBo;
import com.mkyong.customer.model.Customer;
import com.opensymphony.xwork2.ModelDriven;
 
public class CustomerAction implements ModelDriven{

	Customer customer = new Customer();
	List<Customer> customerList = new ArrayList<Customer>();
	
	CustomerBo customerBo;
	//DI via Spring
	public void setCustomerBo(CustomerBo customerBo) {
		this.customerBo = customerBo;
	}

	public Object getModel() {
		return customer;
	}
	
	public List<Customer> getCustomerList() {
		return customerList;
	}

	public void setCustomerList(List<Customer> customerList) {
		this.customerList = customerList;
	}

	//save customer
	public String addCustomer() throws Exception{
		
		//save it
		customer.setCreatedDate(new Date());
		customerBo.addCustomer(customer);
	 
		//reload the customer list
		customerList = null;
		customerList = customerBo.listCustomer();
		
		return "success";
	
	}
	
	//list all customers
	public String listCustomer() throws Exception{
		
		customerList = customerBo.listCustomer();
		
		return "success";
	
	}
	
}

6.春天...

几乎所有配置都在这里完成,Spring专门从事集成工作:)。

CustomerBean.xml –声明Spring的bean:Action,BO和DAO。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
 	<bean id="customerAction" class="com.mkyong.customer.action.CustomerAction">
		<property name="customerBo" ref="customerBo" />	
	</bean>

	<bean id="customerBo" class="com.mkyong.customer.bo.impl.CustomerBoImpl" >
		<property name="customerDAO" ref="customerDAO" />
	</bean>
	
   	<bean id="customerDAO" class="com.mkyong.customer.dao.impl.CustomerDAOImpl" >
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
 
</beans>

database.properties –声明数据库详细信息。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mkyong
jdbc.username=root
jdbc.password=password

DataSource.xml –创建一个数据源bean。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
 <bean 
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
     <value>WEB-INF/classes/config/database/properties/database.properties</value>
   </property>
</bean>
 
  <bean id="dataSource" 
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
  </bean>
 
</beans>

HibernateSessionFactory.xml –创建一个sessionFactory bean来集成Spring和Hibernate。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
<!-- Hibernate session factory -->
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
 
    <property name="hibernateProperties">
       <props>
         <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
         <prop key="hibernate.show_sql">true</prop>
       </props>
    </property>
 
    <property name="mappingResources">
		<list>
          <value>com/mkyong/customer/hibernate/Customer.hbm.xml</value>
		</list>
    </property>	
 
</bean>
</beans>

SpringBeans.xml –创建一个核心Spring的bean配置文件,充当中央bean管理。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	
	<!-- Database Configuration -->
	<import resource="config/spring/DataSource.xml"/>
	<import resource="config/spring/HibernateSessionFactory.xml"/>
 
	<!-- Beans Declaration -->
	<import resource="com/mkyong/customer/spring/CustomerBean.xml"/>
 
</beans>

7. JSP页面

在JSP页面上显示带有Struts 2标签的元素。

customer.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
 
<body>
<h1>Struts 2 + Spring + Hibernate integration example</h1>

<h2>Add Customer</h2>
<s:form action="addCustomerAction" >
  <s:textfield name="name" label="Name" value="" />
  <s:textarea name="address" label="Address" value="" cols="50" rows="5" />
  <s:submit />
</s:form>

<h2>All Customers</h2>

<s:if test="customerList.size() > 0">
<table border="1px" cellpadding="8px">
	<tr>
		<th>Customer Id</th>
		<th>Name</th>
		<th>Address</th>
		<th>Created Date</th>
	</tr>
	<s:iterator value="customerList" status="userStatus">
		<tr>
			<td><s:property value="customerId" /></td>
			<td><s:property value="name" /></td>
			<td><s:property value="address" /></td>
			<td><s:date name="createdDate" format="dd/MM/yyyy" /></td>
		</tr>
	</s:iterator>
</table>
</s:if>
<br/>
<br/>

</body>
</html>

8. struts.xml

全部链接〜

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 	<constant name="struts.devMode" value="true" />
 	
	<package name="default" namespace="/" extends="struts-default">
		
		<action name="addCustomerAction" 
			class="customerAction" method="addCustomer" >
		    <result name="success">pages/customer.jsp</result>
		</action>
	
		<action name="listCustomerAction"
			class="customerAction" method="listCustomer" >
		    <result name="success">pages/customer.jsp</result>
		</action>
		
	</package>
	
</struts>

9. Struts 2 +弹簧

要集成Struts 2和Spring,只需注册ContextLoaderListener侦听器类,定义一个“ contextConfigLocation ”参数,以要求Spring容器解析“ SpringBeans.xml ”而不是默认的“ applicationContext.xml ”。

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Struts 2 Web Application</display-name>
  
  <filter>
	<filter-name>struts2</filter-name>
	<filter-class>
	  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
  </filter>
  
  <filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/classes/SpringBeans.xml</param-value>
  </context-param>
  
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  
</web-app>

10.演示

测试一下: http:// localhost:8080 / Struts2Example / listCustomerAction.action

Struts2 Spring Hibernate Example
Struts2 Spring Hibernate Example

参考

  1. Struts 2 + Hibernate集成示例
  2. Struts 2 + Spring集成示例
  3. 具有完整Hibernate插件的Struts 2 + Hibernate示例
  4. Struts 1.x + Spring + Hibernate集成示例

翻译自: https://mkyong.com/struts2/struts-2-spring-hibernate-integration-example/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cyan20115/article/details/106552184

智能推荐

ubuntu 16.04 安装JDK1.8 redis 和mysql 5.7_喵喵拳法的博客-程序员秘密

环境部署安装说明: JDK和redis安装包均位于/usr/ubisys/softPackage目录下;安装mysql 5.7 1 删除mysql5.7 删除mysql前 先删除一下 /var/lib/mysql 还有 /etc/mysql#下面命令依次执行sudo rm /var/lib/mysql/ -R # ...

python all 函数_Python all()函数_cunchi4221的博客-程序员秘密

python all 函数Python all() function is one of the built-in functions. It takes iterable as an argument and returns True if all elements of the iterable are true or it’s empty. Python all()函数是内置函数之一。 它以...

ECCV 2012 List of accepted papers_xdyang的博客-程序员秘密

Oral presentation oral出来了,只有40篇文章,录取率只有大概2.3%。先Mark一下,等出来后选感兴趣的看几篇Paper idPaper titleAuthor names13Diverse M-Best Solutions in Markov Random FieldsDhruv Batra*, Toyota Techno

生成对抗网络(GAN)_满腹的小不甘_静静的博客-程序员秘密

生成对抗网络(GAN)设计初衷:一句话来概括 GAN 的设计动机就是——自动化。人工提取特征——自动提取特征生成对抗网络(GAN)由2个重要的部分构成:生成器(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器(Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据” 参考:1.生成对抗网络:基本原理 + 典型算法(论文+代码)+ 13种应用2.生成性对抗网络...

使用servlet实现文件上传(用common-fileUpload和common-io包)_SnakeMoving的博客-程序员秘密

http://blog.csdn.net/fatehj/article/details/51050437用servlet实现文件的上传,这里用到Apache的开源工具:common-fileupload。因为common-fileupload依赖于common-io,所以需要同时下载两个包。  common-fileupload下载链接  commonm-io下载链

ubuntu 安装星际译王词典_lyuharvey的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

随便推点

ArcObject中的游标Cursor_ao中游标类型_zhangxiaoning_nan的博客-程序员秘密

ArcObject中的游标Cursor 此文是ArcUser 2006 7-9月一期中的一篇文章,介绍了Arcobjects中的Cursor对象,给大家介绍了洋人是如何认识Cursor的。文章内容浅显,易于理解。作者:Eric Pimpler, President, GeoSpatial Training & Consulting, LLC翻译:浩淼当你听到cursor这个术语的时候,你的脑海中会出现什么?它是在屏幕上显示何处将开始下一个输入活动的符号吗(就是

PHP开发之使用CodeIgniter搭建一个简单的项目_chituan8181的博客-程序员秘密

搭建PHP开发环境请参考PHP开发环境搭建 下载CodeIgniter 新建一个项目 将CodeIgniter中所有文件copy到项目中。 项目建好了,现在我们要做个简单的注册登录功能。 别急,跟我慢慢来。 1.写sql,创建user表 DROP DATABASE I...

TreeView的图标个性化和动态数据加载_treeview图标_若晨工作室的博客-程序员秘密

1、简述如图,需要在页面上实现一个这样的树状图,具体要求如下:1、最顶层的行的收缩图标为绿色小三角,其余层存在子节点的行的收缩图标为一个朝右的尖括号和一个绿色小三角,无子节点      的行无需图标;2、点击小三角时,能收缩或展开节点;3、点击文字所在行(除小三角所在区域)的任何区域能够响应点击事件,且不影响节点收缩状态;4、每行有全屏的分割线;5、

微信订阅号开发笔记(五)_weixin_33826268的博客-程序员秘密

1、用户管理//查询所有分组public function queryGroups(){$url = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=";$url.=$this-&gt;getacctoken();$result = $this-&gt;cget($url);header("Con...

yum安装最新的php_weixin_33994444的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

Android - 仿iPhone调节音量/亮度_仿苹果ios音量调节窗口_NickolasNi的博客-程序员秘密

项目需要用到调节音量及亮度,效果类似iPhone。需求点击增加音量键后现实音量界面并增加下方小格子,用户不再点击调节音量后音量界面会在4s后消失。 整个功能用Service实现,在Service中创建亮度调节界面(通过WindowManager)。在主线程中提供两个按钮来绑定服务,当服务已经绑定时直接调用Bind对象的setLight方法来设置亮度。实现调节亮度界面的Service重写了onC

推荐文章

热门文章

相关标签