SSH-Hibernate+Struts2+Spring的股票项目整合
创建项目之前:我们需要导入我们需要的Hibernate和Struts2和Spring的相关架包。(博客自创,如有问题请留言博主,拒绝盗版,支持正版http://www.cnblogs.com/WuXuanKun/)
项目架构图:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我们需要搭建各个层:层次如上右图
1.搭建beans层:
①创建一个实体类Stock。
/**
* 股票类
*/
public class Stock {
private int sid; //股票编号
private String sname;//股票名称
private int scount; //股数
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getScount() {
return scount;
}
public void setScount(int scount) {
this.scount = scount;
} }
Stock.java
②我们创建小配置。Stock.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.beans">
<class name="Stock" table="Stock">
<id name="sid">
<generator class="native"></generator>
</id>
<property name="sname"/>
<property name="scount" column="COUNT"/>
</class> </hibernate-mapping>
Stock.hbm.xml
2.搭建DAO层:
①创建Stock接口
/**
* Stock接口
*/
public interface IStockDAO {
public int addStock(Stock stock);
}
IStockDAO
②实现接口
import java.io.Serializable; import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.springframework.jdbc.core.support.JdbcDaoSupport; import cn.happy.beans.Stock;
import cn.happy.dao.IStockDAO; public class StockDAOImpl implements IStockDAO{
//在这里定义一个SessionFactory变量
private SessionFactory sessionFactory; @Override
public int addStock(Stock stock) {
Session session = sessionFactory.getCurrentSession();
Serializable count=session.save(stock);
Integer cc=(Integer)count;
return cc.intValue();
} public SessionFactory getSessionFactory() {
return sessionFactory;
} public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} }
StockDAOImpl
3.搭建Service服务层:
①创建接口StockService
public interface IStockService {
public int saveStock(Stock stock);
}
IStockService
②实现上面的接口
public class StockServiceImpl implements IStockService {
//服务层 需要一个dao的对象
private IStockDAO dao; @Override
public int saveStock(Stock stock) {
return dao.addStock(stock);
}
public IStockDAO getDao() {
return dao;
}
public void setDao(IStockDAO dao) {
this.dao = dao;
} }
StockServiceImpl
4.搭建action层
public class StockAction extends ActionSupport implements ModelDriven<Stock>{
private Stock stock;
private IStockService service;
//重点代码:在无参构造中new一个Stock对象。
private StockAction(){
stock=new Stock();
}
//execute()方法是ActionSupport的一个方法。save()一条数据;判断是否插入一条记录。要是count大于0,证明页面有一条数据插入。成功跳入index.jsp页面。否则跳入add.jsp页面。
public String execute(){
int count = service.saveStock(stock);
if (count>0) {
return SUCCESS;
}else {
return INPUT;
}
}
//getModel是ModelDriven<Stock>的一个方法
@Override
public Stock getModel() {
return stock;
}
public Stock getStock() {
return stock;
}
public void setStock(Stock stock) {
this.stock = stock;
} public IStockService getService() {
return service;
} public void setService(IStockService service) {
this.service = service;
}
}
StockAction继承ActionSupport并且实现ModelDriven
5.搭建两个jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
</head> <body>
<form action="addStock" method="post">
股票名称:<input type="text" name="sname"/>
股票股数:<input type="text" name="scount"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
add.jsp页面(插入数据页面)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
</head> <body>
成功页面
</body>
</html>
index.jsp(成功页面)
6.创建Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="addStock" class="stockAction">
<result name="success">/index.jsp</result>
<result name="input">/add.jsp</result>
</action> </package>
</struts>
struts.xml
7.创建连接具体数据库:本案例用Mysql数据库为例:搭建jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\:///test
jdbc.username=wu
jdbc.password=xuan
jdbc.properties
8.创建大配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 01.C3p0 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 设值注入,本质上使用的是类的set方法 -->
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!-- 方式二:找到jdbc.peroperties文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 1.1 SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" ></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate3.SpringSessionContext</prop>
</props>
</property> <property name="mappingLocations" value="classpath:cn/happy/beans/Stock.hbm.xml"></property>
</bean> <!-- dao -->
<bean id="stockDao" class="cn.happy.dao.impl.StockDAOImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- service -->
<bean id="stockService" class="cn.happy.service.impl.StockServiceImpl">
<property name="dao" ref="stockDao"></property>
</bean> <!-- action -->
<bean id="stockAction" class="cn.happy.action.StockAction">
<property name="service" ref="stockService"></property>
</bean> <!-- 事务;能让多个操作做为一个整体,同生共死 荣辱与共 DataSourceTransactionManager-->
<!-- 01.事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 必须配置数据源 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 第三种:AspectJ AOP 配置事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice> <!-- 具体的AOP -->
<aop:config>
<aop:pointcut expression="execution(* *..service.*.*(..))" id="pointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/> </aop:config> </beans>
applicationContext.xml
9.该项目已经成功搭建完毕。可以做一个单测。(该步骤可以省略)
//购买股票测试
@Test
public void addStockTest() {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
IStockService service=(IStockService)ctx.getBean("stockService");
Stock stock=new Stock();
stock.setSname("Y2162基金");
stock.setScount(23);
service.saveStock(stock);
System.out.println("OK!");
}
MyTest测试类
10.启动项目:
成功插入数据:
SSH-Hibernate+Struts2+Spring的股票项目整合的更多相关文章
- Spring与Web项目整合的原理
引言: 在刚开始我们接触IOC时,我们加载并启用SpringIOC是通过如下代码手动加载 applicationContext.xml 文件,new出context对象,完成Bean的创建和属性的注入 ...
- Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...
- struts2+spring的两种整合方式
也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...
- Struts2,Hibernate和Spring之间的框架整合关系
1.首先要认清,hibernate和struts没有半点关系,所以他们之间没有任何可以整合的东西.a:struts 作为中心控制器,肯定要调用一些类来完成一些逻辑.而hibernate开发中,经常使用 ...
- Eclipse搭建SSH框架(Struts2+Spring+Hibernate)
见识少的我经过一天多的研究才知道,在MyEclipse中搭好的框架的配置文件和jar包是通用的.接下来——亮剑! 工具:Eclipse+Tomcat+Mysql 一.先在Eclipse中配置好Tomc ...
- 用MyEclipse搭建SSH框架(Struts2 Spring Hibernate)
1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Ex ...
- java利用myeclipse自带三大框架搭建三大框架(Hibernate+Struts2+Spring)过程详解
搭建过程因人而异,我的搭建过程大致是这样的: 1.创建一个javaweb项目: 2.导入Spring框架,上图: 2.1: 2.2: 2.3: 3.导入struts2框架,上图: 3.1: 3.2: ...
- IDEA整合Mybatis+Struts2+Spring (二)--整合框架
二.搭建目录结构 我这里列出的是搭建完了之后所有的目录和文件,诸位先把目录文件建起来,然后我在给出文件内容 这里的目录建好之后还需要设置一下,让idea识别目录作用,选择File-Project St ...
- Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码
一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...
随机推荐
- 使用NPOI创建Excel
一.NPOI 函式庫: NPOI 函式庫檔案有七個,NPOI 函式庫可以在 http://npoi.codeplex.com 中下載,分別是: NPOI.DLL:NPOI 核心函式庫. NPOI.DD ...
- 深入理解Redis系列
Redis基础教程详情参考:http://www.yiibai.com/redis/redis_quick_guide.html 基础知识: 0.Redis特点:Redis是Remote Dictio ...
- 【工匠大道】markdown使用技巧
本文地址 提纲: 1. 概述 2. 常见技巧 3. 参考文档 1. 概述 常见的markdown的技巧,这里不再谈了,主要是自己感觉比较少见但有用的技巧. 2. 常见技巧 1)[空格]生成空格的效 ...
- WPF 数据绑定 1_1 基础知识&绑定到元素属性
A.数据绑定基础: 数据源对象:WPF将从该对象中提取信息,交由目标对象进行显示. 目标对象:从数据源中提取信息,并赋给该对象的属性. B.绑定到元素属性 最简单的绑定情形则是将一个源对象指定为一个W ...
- Netty(一)引题
本文介绍Java BIO(同步阻塞IO),伪异步IO,NIO(非阻塞IO),AIO(异步IO)这四种IO的情况,并对不同IO模型作比较. 目录 1.BIO 2.伪异步IO 3.NIO 4.AIO 5. ...
- 今天写项目时,突然发现canvas的一些公式不记得了,所以整理了一番,分享给大家。
Canvas 标签<canvas></canvas> 默认宽300,高150,不用用Css设置宽高 获取方法var ctx = cas.getcontext("2d& ...
- 架构验证过程发现非数据类型错误 validation found non-data type errors
问题: infopath报一下错误 validation found non-data type errors 架构验证过程发现非数据类型错误 原因: 重复表字段在后台代码里要一一对应,否则报错. 错 ...
- Android-socket服务端断重启后,android客户端自动重连
今天研究这个问题搞了整整一天啊!终于出来了,不过我没有多大的成就感,为什么呢?因为这不是我的劳动成果.同样的问题,我却没想出来!心塞的很啊…… 不过还是要给大家分享一下,希望给大家带来帮助! 先声明一 ...
- iOS--手势之谜
原文转至: http://www.cnblogs.com/huangjianwu/p/4675648.html iOS在手机APP的手势操作中包含了:拖动.捏合.旋转.点按.长按.轻扫.自定义等等,详 ...
- Android app被系统kill的场景
何时发生 当我们的app被切到后台的时候,比如用户按下了home键或者切换到了别的应用,总之是我们的app不再和用户交互了,这个时候对于我们的app来说就是什么事情都可能发生的时候了,因为系统会认为你 ...