Struts2、Spring和Hibernate应用实例(上)

Struts2SpringHibernate应用实例

Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用、功能齐全的标志库(Tag Library)、开放源代码。而Spring的出现,在某些方面极大的方面了Struts的开发。同时,Hibernate作为对象持久化的框架,能显示的提高软件开发的效率与生产力。这三种流行框架的整合应用,可以发挥它们各自的优势,使软件开发更加的快速与便捷。

struts2发布已经很久了,但关于如何使用它的教程及实例并不多。特别是与Spring及Hibernate等流行框架的集成,并不多见。现在就将笔者使用Myeclipse工具应用struts2 + spring2 +hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过这样的整合示例,让读者了解这些框架各自的特点,以便于在自己的项目中,根据实际情况,尽快的过渡到Struts2的时代。本文的内容基于Struts2.0.6。

一、准备工作

spring2与1.x区别不大,可以平滑的过度,笔者也是把spring1.28换成了spring2.0.6,算是升级到spring 2.0了。struts2基本就是webwork2.2,与以前的struts1.x可以说没任何关系了。因为是第一次用struts2,也是第一次用webwork,所以有很多不完善,不规范的地方,还望大家来拍砖。

开发环境:MyEclipse5.0+Eclipse3.2+JDK5.0+

Tomcat5.5+struts2+Spring2.0.6+Hibernate3.1。本示例通过对一个图书进行管理的系统,提供基本的增加、删除、修改、查询等功能。

lib包需要以下右图所示的这些包。其中Struts2.0.6的下载地址为:

http://people.apache.org/builds/struts/2.0.6

Hibernate3.1的下载地址为:

http://www.hibernate.org

spring2.0.6的下载地址为:

http://www.springframework.org

使用的数据库为mysql 5.0,使用的JDBC驱动JAR包为:mysql-connection-java-5.0.4-bin

创建数据表的sql语句为:

createdatabase game

CREATETABLE `books` (

`book_id`int(11) NOT NULL default ‘0‘,

`book_name`varchar(200) character set gb2312 default NULL,

`book_author`varchar(100) character set gb2312 default NULL,

`book_publish`varchar(100) character set gb2312 default NULL,

`book_date`date default NULL,

`book_isbn`varchar(20) default NULL,

`book_page`int(11) default NULL,

`book_price`decimal(10,2) default NULL,

`book_content`varchar(100) character set gb2312 default NULL,

PRIMARYKEY  (`book_id`)

)ENGINE=InnoDB DEFAULT CHARSET=gbk ROW_FORMAT=COMPRESSED;

二、建立公共类

1、AbstractAction类

Struts2和Struts1.x的差别,最明显的就是Struts2是一个pull-MVC架构。Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。

虽然,在理论上Struts2的Action无须实现任何接口或者是继承任何的类,但是,在实际编程过程中,为了更加方便的实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并且重载(Override)此类里的String execute()方法。因此先建立抽象类,以供其它Action类使用。

packagecom.sterning.commons;

importcom.opensymphony.xwork2.ActionSupport;

publicclass AbstractAction extends ActionSupport {

}

com.sterning.commons.AbstractAction.java

参考JavaDoc,可知ActionSupport类实现了接口:

com.opensymphony.xwork2.Action

com.opensymphony.xwork2.LoaleProvider

com.opensymphony.xwork2.TextProvider

com.opensymphony.xwork2.Validateable

com.opensymphony.xwork2.ValidationAware

com.uwyn.rife.continuations.ContinuableObject

java.io.Searializable

java.lang.Cloneable

2Pager分页类

为了增加程序的分页功能,特意建立共用的分页类。

packagecom.sterning.commons;

importjava.math.*;

publicclass Pager {

privateint totalRows; //总行数

private int pageSize = 5; //每页显示的行数

private int currentPage; //当前页号

private int totalPages; //总页数

private int startRow; //当前页在数据库中的起始行

publicPager() {

}

publicPager(int _totalRows) {

totalRows= _totalRows;

totalPages=totalRows/pageSize;

intmod=totalRows%pageSize;

if(mod>0){

totalPages++;

}

currentPage= 1;

startRow= 0;

}

publicint getStartRow() {

returnstartRow;

}

publicint getTotalPages() {

returntotalPages;

}

publicint getCurrentPage() {

returncurrentPage;

}

publicint getPageSize() {

returnpageSize;

}

publicvoid setTotalRows(int totalRows) {

this.totalRows= totalRows;

}

publicvoid setStartRow(int startRow) {

this.startRow= startRow;

}

publicvoid setTotalPages(int totalPages) {

this.totalPages= totalPages;

}

publicvoid setCurrentPage(int currentPage) {

this.currentPage= currentPage;

}

publicvoid setPageSize(int pageSize) {

this.pageSize= pageSize;

}

publicint getTotalRows() {

returntotalRows;

}

publicvoid first() {

currentPage= 1;

startRow= 0;

}

publicvoid previous() {

if(currentPage == 1) {

return;

}

currentPage--;

startRow= (currentPage - 1) * pageSize;

}

publicvoid next() {

if(currentPage < totalPages) {

currentPage++;

}

startRow= (currentPage - 1) * pageSize;

}

publicvoid last() {

currentPage= totalPages;

startRow= (currentPage - 1) * pageSize;

}

publicvoid refresh(int _currentPage) {

currentPage= _currentPage;

if(currentPage > totalPages) {

last();

}

}

}

com.sterning.commons.Pager.java

同时,采用PagerService类来发布成为分页类服务PagerService,代码如下:

packagecom.sterning.commons;

publicclass PagerService {

publicPager getPager(String currentPage,String pagerMethod,int totalRows) {

//    定义pager对象,用于传到页面

Pager pager = new Pager(totalRows);

//    如果当前页号为空,表示为首次查询该页

//    如果不为空,则刷新pager对象,输入当前页号等信息

if (currentPage != null) {

pager.refresh(Integer.parseInt(currentPage));

}

//    获取当前执行的方法,首页,前一页,后一页,尾页。

if (pagerMethod != null) {

if(pagerMethod.equals("first")) {

pager.first();

}else if (pagerMethod.equals("previous")) {

pager.previous();

}else if (pagerMethod.equals("next")) {

pager.next();

}else if (pagerMethod.equals("last")) {

pager.last();

}

}

returnpager;

}

}

com.sterning.commons.PagerService.java

三、建立数据持久化层

1、编写实体类Books及books.hbm.xml映射文件。

packagecom.sterning.books.model;

importjava.util.Date;

publicclass Books {

//    Fields

private String bookId;//编号

private String bookName;//书名

private String bookAuthor;//作者

private String bookPublish;//出版社

private Date bookDate;//出版日期

private String bookIsbn;//ISBN

private String bookPage;//页数

private String bookPrice;//价格

private String bookContent;//内容提要

//    Constructors

public Books(){}

//    Property accessors

public String getBookId() {

returnbookId;

}

publicvoid setBookId(String bookId) {

this.bookId= bookId;

}

publicString getBookName() {

returnbookName;

}

publicvoid setBookName(String bookName) {

this.bookName= bookName;

}

publicString getBookAuthor() {

returnbookAuthor;

}

publicvoid setBookAuthor(String bookAuthor) {

this.bookAuthor= bookAuthor;

}

publicString getBookContent() {

returnbookContent;

}

publicvoid setBookContent(String bookContent) {

this.bookContent= bookContent;

}

publicDate getBookDate() {

returnbookDate;

}

publicvoid setBookDate(Date bookDate) {

this.bookDate= bookDate;

}

publicString getBookIsbn() {

returnbookIsbn;

}

publicvoid setBookIsbn(String bookIsbn) {

this.bookIsbn= bookIsbn;

}

publicString getBookPage() {

returnbookPage;

}

publicvoid setBookPage(String bookPage) {

this.bookPage= bookPage;

}

publicString getBookPrice() {

returnbookPrice;

}

publicvoid setBookPrice(String bookPrice) {

this.bookPrice= bookPrice;

}

publicString getBookPublish() {

returnbookPublish;

}

publicvoid setBookPublish(String bookPublish) {

this.bookPublish= bookPublish;

}

}

com.sterning.books.model.Books.java

接下来要把实体类Books的属性映射到books表,编写下面的books.hbm.xml文件:

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<classname="com.sterning.books.model.Books" table="books" >

<id name="bookId"type="string">

<column name="book_id"length="5" />

<generatorclass="assigned" />

</id>

<property name="bookName"type="string">

<columnname="book_name" length="100" />

</property>

<propertyname="bookAuthor" type="string">

<columnname="book_author" length="100" />

</property>

<propertyname="bookPublish" type="string">

<columnname="book_publish" length="100" />

</property>

<property name="bookDate"type="java.sql.Timestamp">

<columnname="book_date" length="7" />

</property>

<propertyname="bookIsbn" type="string">

<columnname="book_isbn" length="20" />

</property>

<property name="bookPage"type="string">

<columnname="book_page" length="11" />

</property>

<property name="bookPrice"type="string">

<columnname="book_price" length="4" />

</property>

<propertyname="bookContent" type="string">

<columnname="book_content" length="100" />

</property>

</class>

</hibernate-mapping>

com.sterning.books.model.books.hbm.xml

2、hibernate.cfg.xml配置文件如下:(注意它的位置在scr/hibernate.cfg.xml)

<?xmlversion="1.0" encoding="ISO-8859-1"?>

<!DOCTYPEhibernate-configuration PUBLIC

"-//Hibernate/HibernateConfiguration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<propertyname="show_sql">true</property>

<mappingresource="com/sterning/books/model/books.hbm.xml"></mapping>

</session-factory>

</hibernate-configuration>

Com.sterning.bean.hibernate.hibernate.cfg.xml

时间: 2024-09-28 17:48:50

Struts2、Spring和Hibernate应用实例(上)的相关文章

spring+springmvc+hibernate整合实例

上篇博文中写了spring与springmvc的整合,而这一篇则是又加上了hibernate. 与上次一样,这一次仍然是先导入jar包,这一次则要加入hibernate中的jar包,如下图所示: 同时再新建两个源文件夹,一个为config,一个为test,分别存放配置文件与测试用例,现在来进行spring,springmvc以及hibernate的配置. 新建spring-hibernate.xml,applicationContext.xml,springmvc.xml,hibernate.c

3、Spring整合Hibernate

经过前面的两节分析:1.Hibernate之生成SessionFactory源码追踪 和 2.Spring的LocalSessionFactoryBean创建过程源码分析 .我们可以得到这样一个结论,spring的LocalSessionFactoryBean具体是调用Hibernate的Configuration中configure(...)方法来读取并解析xxx.cfg.xml文件的,同样也会得到一个原生态的org.hibernate.cfg.Configuration 和 org.hibe

spring整合hibernate实例(上)

这篇主要是展示spring和hibernate的整合的实例(上)——自己也是第一弄,有些内容还不是很规范,就是项目能跑通,有好的建议欢迎提出来~ 1.数据库表:(简单的用来测试的表,age是主键int类型,name是varchar类型) 2.项目工程图: 接下来的代码和配置文件就按照上图的顺序给出 3.PersonService: package service; import java.sql.SQLException; import org.springframework.beans.fac

SSH(Struts2+Spring+Hibernate)框架搭建流程&lt;注解的方式创建Bean&gt;

此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblogs.com/wkrbky/p/5912810.html 一.Hibernate(数据层)的搭建: 实现流程 二.Spring(注入实例)的使用: 实现流程 三.Struts2(MVC)的搭建: 实现流程 这里注意一点问题: Struts2与Hibernate在一起搭建,antlr包,有冲突.MyE

Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程

| 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SSH框架简介:①SSH框架是由struts2.spring.hibernate三大框架组合起来的一套总框架,一般来说这三个东西我们不会单独使用.  ②在学习SSH框架之前建议读者先学mvc,因为SSH是在mvc基础上根据mvc的缺点而产生的一套比较成熟的框架,也比较稳定.  ③SSH框架的流程:浏览器

Struts2+Spring+Hibernate(SSH)框架的搭建

首先需要下载struts2 ,spring,hibernate  的资源包; Struts2资源包下载路径:http://www.apache.org/spring资源包下载路径:http://projects.spring.io/spring-framework/hibernate资源包下载路径:http://hibernate.org/orm/downloads/ 在SSH框架的搭建步骤: 第一步:在eclipse中创建一个web项目,并生成web.xml文件; 第二步:往lib目录导入ja

Struts2+Spring+Hibernate 三大框架的合并集成

这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样.  首先看一下分工吧: Struts2做的MVC的流程框架,主要完成从客户端访问到选择action的过程,其中过滤器起到了Controller的作用,action属于model,而jsp则是view页面的展示. Spring主要利用Ioc的特长来管理各种对象:action,service,dao,数据访问源,H

基于注解的struts2+spring+hibernate集成

applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.spri

SSH框架简化(struts2+spring+hibernate)

目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: .运行环境:Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91,Tomcat 8.0,struts-2.3.30-apps,spring-framework-4.2.2.RELEASE,hibernate-release-5.2.2.Final,mysql数据库 一.  在eclipse右键新建一个项目并勾上生成web.xml文件 二.导入struts.spri