整合SSH(Spring+Struts+Hibernate)实例(一)

前言:

JDK:Java 1.7.0

IDE:Eclipse , Version=Kepler 4.3.0 ;

服务器:Tomcat7.0;

数据库:Mysql5.5

这是一个国家电力系统的案例,本来是要先描述系统设计的,但是这里注重开发实操过程,也就省略了。

这章需要实现的是:从jsp页面接收表单数据,再存到数据库里面(后面有源码下载)

一、java、eclipse、tomcat、mysql的下载安装搭建

网上都有教程,需要说明的是tomcat的安装,新手最好下载exe安装包,省心;junit插件自己解决

点此下载Tomcat7.0

Java1.7下载

(需要注册账号)

Eclipse 64位下载

(最新版的)

Mysql5.5精简版

二、新建一个动态网站项目

整合SSH(Spring+Struts+Hibernate)实例(一)_第1张图片

起了名字,然后点击完成就行了(有兴趣可以设置一下WebContent)

三、数据库的设计

建议使用cmd指令建库,多熟悉mysql操作;如果图方便也可以下载数据库图视化工具操作(比如navicat)

1、打开cmd,输入mysql -u*(此处*为你的用户名) -p*(此处*为数据库密码)

登陆成功后

整合SSH(Spring+Struts+Hibernate)实例(一)_第2张图片

创建数据库

CREATE DATABASE elec CHARACTER SET utf8 COLLATE utf8_general_ci;

改用elec数据库

use elec;

创建表

CREATE TABLE Elec_Text(

textID varchar(50) not null,

textName varchar(50),

textDate datetime,

textRemark varchar(500),

primary key(textID)

);

如图:

整合SSH(Spring+Struts+Hibernate)实例(一)_第3张图片

可以使用desc elec_text;查看表结构


整合SSH(Spring+Struts+Hibernate)实例(一)_第4张图片

四、引入hibernate

1、导入用到的hibernate 核心Jar包(这里把mysql的连接包也加进去了)

点此下载hibernate5.5.5核心jar包

2、在src文件夹根目录下新建hibernate.cfg.xml文件,该文件在src根目录下会被自动加载

其中是映射后面写到的xml文件


整合SSH(Spring+Struts+Hibernate)实例(一)_第5张图片

五、新建一个包,并新建PO持久层对象,用于映射数据表elec_text,ElecText.Java(类名词开头都大写)

package cn.itcast.elec.domain;

import java.util.Date;

/**

* PO持久层对象,对应数据库表Elec_Text

*

*/

@SuppressWarnings("serial")

public class ElecText implements java.io.Serializable {

private String textID;

private String textName;

private Date textDate;

private String textRemark;

public String getTextID() {

return textID;

}

public void setTextID(String textID) {

this.textID = textID;

}

public String getTextName() {

return textName;

}

public void setTextName(String textName) {

this.textName = textName;

}

public Date getTextDate() {

return textDate;

}

public void setTextDate(Date textDate) {

this.textDate = textDate;

}

public String getTextRemark() {

return textRemark;

}

public void setTextRemark(String textRemark) {

this.textRemark = textRemark;

}

}

六、新建上面PO类的hibernate映射配置文件,ElecText.hbm.xml


整合SSH(Spring+Struts+Hibernate)实例(一)_第6张图片

七、编写junit测试类,测试映射、连接等等是否有误

1、新建一个junit包,新建TestHibernate.java文件

public class TestHibernate {

@Test

public void testElecText(){

Configuration config = new Configuration();

config.configure();

//创建sessionFactory对象

SessionFactory sf = config.buildSessionFactory();

//打开session,操作数据库

Session session = sf.openSession();

//开启事务

Transaction tr = session.beginTransaction();

//实例化ElecText对象,添加数据,执行保存操作

ElecText elecText = new ElecText();

elecText.setTextName("测试Hibernate名称");

elecText.setTextDate(new Date());

elecText.setTextRemark("测试Hibernate备注");

//保存

session.save(elecText);

//提交事务

tr.commit();

session.close();

}

}

2、右键--》debug看是否有问题(有问题的话自己解决吧。。)

八、引入spring

1、spring核心jar包的下载

点击下载spring4.3.6

2、在src根目录下新建beans.xml(之所以在根目录下是因为加载的时候直接写文件名就行,方便)


整合SSH(Spring+Struts+Hibernate)实例(一)_第7张图片

其中3是为hibernate注入sessionFactory工厂,第四步是创建事务管理器,有这个管理器,spring会自动提交、回滚等等事务

九、新建cn.itcast.elec.dao包,再新建一个公共DAO接口ICommonDao.java,规范数据访问类

package cn.itcast.elec.dao;

public interface ICommonDao{

public void save(T entity);

}

十、新建一个impl包,实现上面的接口CommonDaoImpl.java


整合SSH(Spring+Struts+Hibernate)实例(一)_第8张图片

该类继承了HibernateDaoSuppport类,里面提供了增删改查的方法,@Resource(name="sessionFactory")的意思是将bean.xml配置中id为sessionFactory的bean(里面内部已经生存了sessionFactory类)注入给setSessionFactoryDi方法

十一、在原来的dao包下,新建一个elecTextDao.java,用于规范elecText的访问

package cn.itcast.elec.dao;

import cn.itcast.elec.domain.ElecText;

public interface IElecTextDao extends ICommonDao{

public final static String SERVICE_NAME = "cn.itcast.elec.dao.impl.ElecTextDaoImpl";

}

十二、在原来的impl包下,新建一个ElecTextDaoImpl,用来实现elecTextDao接口

package cn.itcast.elec.dao.impl;

import org.springframework.stereotype.Repository;

import cn.itcast.elec.dao.IElecTextDao;import cn.itcast.elec.domain.ElecText;

@Repository(IElecTextDao.SERVICE_NAME)

public class ElecTextDaoImpl extends CommonDaoImplimplements IElecTextDao {

}

其中@Repository(IElecTextDao.SERVICE_NAME)是将名为IElecTextDao.SERVICE_NAME的类注入到spring容器当中

十三、新建一个service接口包,并在其下面新建一个service接口,规范业务


整合SSH(Spring+Struts+Hibernate)实例(一)_第9张图片

十四、新建一个service实现包,并新建一个实现类

整合SSH(Spring+Struts+Hibernate)实例(一)_第10张图片

十五、struts的引用

1、struts2 jar包引入

点此下载struts2 jar包

2、写一个所有Action都要继承的类,这个类主要是为了获取到HttpServletRequest和HttpServletResponse对象,而这两个对象用于客服端和服务端的信息传递。


整合SSH(Spring+Struts+Hibernate)实例(一)_第11张图片

其实,如果不继承ServletRequest和ServletResponse也可以,不过要通过ServletActionContext或者ActionContext来获取,更重要的是,这两种不是IOC模式,需要自己注入,多了一些步骤

3、接下来就是要继承这个BaseAction类了,但是在此之前还需要写一个从Spring IOC容器加载Bean的类,因为这个加载是公共代码,而且也很费时间,所以把这部分代码抽出来,作为一个服务类,加载一次就好。

首先,建一个ApplicationContext的JavaBean


整合SSH(Spring+Struts+Hibernate)实例(一)_第12张图片

再利用加载了bean配置的类,进行bean的加载


整合SSH(Spring+Struts+Hibernate)实例(一)_第13张图片

之所以把把加载配置文件和加载bean分开两个类是因为还可以利用配置文件干一些其他的事情

4、这个时候回想一下我们所要实现的业务,没错就是要将jsp的表单数据存到数据库里面,这里就需要一个载体承担jsp页面和action之间的信息传递。回想一下上面的PO类,负责完成java和数据库的映射。其实我们也可以用那个PO类完成这里的信息传递,但是这样做不好。因为数据库的数据不完全会是页面所反馈或者用到的,造成资源浪费等。所以好的做法是再写一个Model类,用于担当起表现的作用


整合SSH(Spring+Struts+Hibernate)实例(一)_第14张图片

5、再在action包下,写一个存储从jsp页面传过来的action


整合SSH(Spring+Struts+Hibernate)实例(一)_第15张图片

其中实现ModelDriven的好处,大家自行百度

6、在web.xml(WebContent/WEB-INF目录下)配置struts相关拦截器


整合SSH(Spring+Struts+Hibernate)实例(一)_第16张图片

7、配置完拦截器后,改拦截器会自动加载src根目录下的命名为struts.xml的文件


整合SSH(Spring+Struts+Hibernate)实例(一)_第17张图片

最后的jsp,就是一个表单的提交,大家可以自己写,也可以看代码

点击下载源代码(提取码为oimt)

可能需要将WebContent改为WebRoot,如果运行提示resources 不可用,那么可以对着项目右键-->Properties-->Project Facets。取消再勾选Dynamic Web Module,点击”Apply“应用,然后下面会出现一个“Further Configuration Avaliable...",再点进去,修改WebContent为WebRoot


整合SSH(Spring+Struts+Hibernate)实例(一)_第18张图片

终于写完了,感觉要吐血了。。(有什么错误的地方,还希望大家指出并指正)

PS:转载分享请标明出处,谢谢

你可能感兴趣的:(整合SSH(Spring+Struts+Hibernate)实例(一))