美文网首页
整合SSH(Spring+Struts+Hibernate)实例

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

作者: 要酱油了 | 来源:发表于2017-06-25 18:39 被阅读0次

    前言:

    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精简版

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

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

    三、数据库的设计

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

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

    登陆成功后

    创建数据库

    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)

    );

    如图:

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

    四、引入hibernate

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

    点此下载hibernate5.5.5核心jar包

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

    其中<mapping resource=""/>是映射后面写到的xml文件

    五、新建一个包,并新建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

    七、编写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(之所以在根目录下是因为加载的时候直接写文件名就行,方便)

    其中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

    该类继承了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接口,规范业务

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

    十五、struts的引用

    1、struts2 jar包引入

    点此下载struts2 jar包

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

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

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

    首先,建一个ApplicationContext的JavaBean

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

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

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

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

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

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

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

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

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

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

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

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

    相关文章

      网友评论

          本文标题:整合SSH(Spring+Struts+Hibernate)实例

          本文链接:https://www.haomeiwen.com/subject/tlblcxtx.html