Struts2Spring和Hibernate应用实例.docx

上传人:小飞机 文档编号:3166314 上传时间:2023-03-11 格式:DOCX 页数:50 大小:55.78KB
返回 下载 相关 举报
Struts2Spring和Hibernate应用实例.docx_第1页
第1页 / 共50页
Struts2Spring和Hibernate应用实例.docx_第2页
第2页 / 共50页
Struts2Spring和Hibernate应用实例.docx_第3页
第3页 / 共50页
Struts2Spring和Hibernate应用实例.docx_第4页
第4页 / 共50页
Struts2Spring和Hibernate应用实例.docx_第5页
第5页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Struts2Spring和Hibernate应用实例.docx》由会员分享,可在线阅读,更多相关《Struts2Spring和Hibernate应用实例.docx(50页珍藏版)》请在三一办公上搜索。

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

2、特别是与Spring及Hibernate等流行框架的集成,并不多见。现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过这样的整合示例,让读者了解这些框架各自的特点,以便于在自己的项目中,根据实际情况,尽快的过渡到Struts2的时代。本文的内容基于Struts2.0.6。 一、准备工作 spring2与1.x区别不大,可以平滑的过度,笔者也是把spring1.28换成了s

3、pring2.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.apa

4、che.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语句为: create database game CREATE TABLE books ( book_id int(11) NOT NULL default 0, book_name varchar(200)

5、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_con

6、tent varchar(100) character set gb2312 default NULL, PRIMARY KEY (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无须继承任何类型或实现任何接口,

7、表单数据包含在Action中,通过Getter和Setter获取。 虽然,在理论上Struts2的Action无须实现任何接口或者是继承任何的类,但是,在实际编程过程中,为了更加方便的实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并且重载此类里的String execute方法。因此先建立抽象类,以供其它Action类使用。 package mons; import com.opensymphony.xwork2.ActionSupport; public class AbstractAction extends Actio

8、nSupport mons.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

9、.io.Searializable java.lang.Cloneable 2、Pager分页类 为了增加程序的分页功能,特意建立共用的分页类。 package mons; import java.math.*; public class Pager private int totalRows; /总行数 private int pageSize = 5; /每页显示的行数 private int currentPage; /当前页号 private int totalPages; /总页数 private int startRow; /当前页在数据库中的起始行 public Pager pu

10、blic Pager(int _totalRows) totalRows = _totalRows; totalPages=totalRows/pageSize; int mod=totalRows%pageSize; if(mod0) totalPages+; currentPage = 1; startRow = 0; public int getStartRow return startRow; public int getTotalPages return totalPages; public int getCurrentPage return currentPage; public

11、int getPageSize return pageSize; public void setTotalRows(int totalRows) this.totalRows = totalRows; public void setStartRow(int startRow) this.startRow = startRow; public void setTotalPages(int totalPages) this.totalPages = totalPages; public void setCurrentPage(int currentPage) this.currentPage =

12、currentPage; public void setPageSize(int pageSize) this.pageSize = pageSize; public int getTotalRows return totalRows; public void first currentPage = 1; startRow = 0; public void previous if (currentPage = 1) return; currentPage-; startRow = (currentPage - 1) * pageSize; public void next if (curren

13、tPage totalPages) last; mons.Pager.java 同时,采用PagerService类来发布成为分页类服务PagerService,代码如下: package mons; public class PagerService public Pager getPager(String currentPage,String pagerMethod,int totalRows) / 定义pager对象,用于传到页面 Pager pager = new Pager(totalRows); / 如果当前页号为空,表示为首次查询该页 / 如果不为空,则刷新pager对象,输入当

14、前页号等信息 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(

15、last) pager.last; return pager; mons.PagerService.java 三、 建立数据持久化层 1、编写实体类Books及books.hbm.xml映射文件。 package com.sterning.books.model; import java.util.Date; public class Books / Fields private String bookId;/编号 private String bookName;/书名 private String bookAuthor;/作者 private String bookPublish;/出版社

16、private Date bookDate;/出版日期 private String bookIsbn;/ISBN private String bookPage;/页数 private String bookPrice;/价格 private String bookContent;/内容提要 / Constructors public Books / Property accessors public String getBookId return bookId; public void setBookId(String bookId) this.bookId = bookId; publi

17、c String getBookName return bookName; public void setBookName(String bookName) this.bookName = bookName; public String getBookAuthor return bookAuthor; public void setBookAuthor(String bookAuthor) this.bookAuthor = bookAuthor; public String getBookContent return bookContent; public void setBookConte

18、nt(String bookContent) this.bookContent = bookContent; public Date getBookDate return bookDate; public void setBookDate(Date bookDate) this.bookDate = bookDate; public String getBookIsbn return bookIsbn; public void setBookIsbn(String bookIsbn) this.bookIsbn = bookIsbn; public String getBookPage ret

19、urn bookPage; public void setBookPage(String bookPage) this.bookPage = bookPage; public String getBookPrice return bookPrice; public void setBookPrice(String bookPrice) this.bookPrice = bookPrice; public String getBookPublish return bookPublish; public void setBookPublish(String bookPublish) this.bo

20、okPublish = bookPublish; com.sterning.books.model.Books.java 接下来要把实体类Books的属性映射到books表,编写下面的books.hbm.xml文件: !DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN com.sterning.books.model.books.hbm.xml 2、hibernate.cfg.xml配置文件如下: !DOCTYPE hibernate-configuration PUBLIC -/Hibernat

21、e/Hibernate Configuration DTD 3.0/EN true Com.sterning.bean.hibernate.hibernate.cfg.xml 四、 建立DAO层 DAO访问层负责封装底层的数据访问细节,不仅可以使概念清晰,而且可以提高开发效率。 1、建立DAO的接口类:BooksDao package com.sterning.books.dao.iface; import java.util.List; import com.sterning.books.model.Books; public interface BooksDao List getAll;/

22、获得所有记录 List getBooks(int pageSize, int startRow);/获得所有记录 int getRows;/获得总行数 int getRows(String fieldname,String value);/获得总行数 List queryBooks(String fieldname,String value);/根据条件查询 List getBooks(String fieldname,String value,int pageSize, int startRow);/根据条件查询 Books getBook(String bookId);/根据ID获得记录

23、String getMaxID;/获得最大ID值 void addBook(Books book);/添加记录 void updateBook(Books book);/修改记录 void deleteBook(Books book);/删除记录 com.sterning.books.dao.iface.BooksDao.java 2、实现此接口的类文件,BooksMapDao package com.sterning.books.dao.hibernate; import java.sql.SQLException; import java.util.Iterator; import jav

24、a.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.sterning.books.dao.iface.BooksDao; import com

25、.sterning.books.model.Books; import mons.PublicUtil; /* * author cwf * */ public class BooksMapDao extends HibernateDaoSupport implements BooksDao public BooksMapDao /* * 函数说明:添加信息 * 参数说明:对象 * 返回值: */ public void addBook(Books book) this.getHibernateTemplate.save(book); /* * 函数说明:删除信息 * 参数说明: 对象 * 返

26、回值: */ public void deleteBook(Books book) this.getHibernateTemplate.delete(book); /* * 函数说明:获得所有的信息 * 参数说明: * 返回值:信息的集合 */ public List getAll String sql=FROM Books ORDER BY bookName; return this.getHibernateTemplate.find(sql); /* * 函数说明:获得总行数 * 参数说明: * 返回值:总行数 */ public int getRows String sql=FROM B

27、ooks ORDER BY bookName; List list=this.getHibernateTemplate.find(sql); return list.size; /* * 函数说明:获得所有的信息 * 参数说明: * 返回值:信息的集合 */ public List getBooks(int pageSize, int startRow) throws HibernateException final int pageSize1=pageSize; final int startRow1=startRow; return this.getHibernateTemplate.ex

28、ecuteFind(new HibernateCallback public List doInHibernate(Session session) throws HibernateException, SQLException / TODO 自动生成方法存根 Query query=session.createQuery(FROM Books ORDER BY bookName); query.setFirstResult(startRow1); query.setMaxResults(pageSize1); return query.list; ); /* * 函数说明:获得一条的信息 *

29、 参数说明: ID * 返回值:对象 */ public Books getBook(String bookId) return (Books)this.getHibernateTemplate.get(Books.class,bookId); /* * 函数说明:获得最大ID * 参数说明: * 返回值:最大ID */ public String getMaxID String date=PublicUtil.getStrNowDate; String sql=SELECT MAX(bookId)+1 FROM Books ; String noStr = null; List ll = (

30、List) this.getHibernateTemplate.find(sql); Iterator itr = ll.iterator; if (itr.hasNext) Object noint = itr.next; if(noint = null) noStr = 1; else noStr = noint.toString; if(noStr.length=1) noStr=000+noStr; else if(noStr.length=2) noStr=00+noStr; else if(noStr.length=3) noStr=0+noStr; else noStr=noSt

31、r; return noStr; /* * 函数说明:修改信息 * 参数说明: 对象 * 返回值: */ public void updateBook(Books pd) this.getHibernateTemplate.update(pd); /* * 函数说明:查询信息 * 参数说明: 集合 * 返回值: */ public List queryBooks(String fieldname,String value) System.out.println(value: +value); String sql=FROM Books where +fieldname+ like %+valu

32、e+%+ORDER BY bookName; return this.getHibernateTemplate.find(sql); /* * 函数说明:获得总行数 * 参数说明: * 返回值:总行数 */ public int getRows(String fieldname,String value) String sql=; if(fieldname=null|fieldname.equals()|fieldname=null|fieldname.equals() sql=FROM Books ORDER BY bookName; else sql=FROM Books where +f

33、ieldname+ like %+value+%+ORDER BY bookName; List list=this.getHibernateTemplate.find(sql); return list.size; /* * 函数说明:查询信息 * 参数说明: 集合 * 返回值: */ public List getBooks(String fieldname,String value,int pageSize, int startRow) final int pageSize1=pageSize; final int startRow1=startRow; final String que

34、ryName=fieldname; final String queryValue=value; String sql=; if(queryName=null|queryName.equals()|queryValue=null|queryValue.equals() sql=FROM Books ORDER BY bookName; else sql=FROM Books where +fieldname+ like %+value+%+ORDER BY bookName; final String sql1=sql; return this.getHibernateTemplate.exe

35、cuteFind(new HibernateCallback public List doInHibernate(Session session) throws HibernateException, SQLException / TODO 自动生成方法存根 Query query=session.createQuery(sql1); query.setFirstResult(startRow1); query.setMaxResults(pageSize1); return query.list; ); 五、业务逻辑层 在业务逻辑层需要认真思考每个业务逻辑所能用到的持久层对象和DAO。DAO

36、层之上是业务逻辑层,DAO类可以有很多个,但业务逻辑类应该只有一个,可以在业务逻辑类中调用各个DAO类进行操作。 1、创建服务接口类IBookService package com.sterning.books.services.iface; import java.util.List; import com.sterning.books.model.Books; public interface IBooksService . List getAll;/获得所有记录 List getBooks(int pageSize, int startRow);/获得所有记录 int getRows;/

37、获得总行数 int getRows(String fieldname,String value);/获得总行数 List queryBooks(String fieldname,String value);/根据条件查询 List getBooks(String fieldname,String value,int pageSize, int startRow);/根据条件查询 Books getBook(String bookId);/根据ID获得记录 String getMaxID;/获得最大ID值 void addBook(Books pd);/添加记录 void updateBook(

38、Books pd);/修改记录 void deleteBook(String bookId);/删除记录 com.sterning.books.services.iface.IBookService.java 2、实现此接口类:BookService: package com.sterning.books.services; import java.util.List; import com.sterning.books.dao.iface.BooksDao; import com.sterning.books.model.Books; import com.sterning.books.se

39、rvices.iface.IBooksService; public class BooksService implements IBooksService private BooksDao booksDao; public BooksService /* * 函数说明:添加信息 * 参数说明:对象 * 返回值: */ public void addBook(Books book) booksDao.addBook(book); /* * 函数说明:删除信息 * 参数说明: 对象 * 返回值: */ public void deleteBook(String bookId) Books book=booksDao.getBook(b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号