Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391915
  • 博文数量: 93
  • 博客积分: 3006
  • 博客等级: 少校
  • 技术积分: 998
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-02 17:23
文章分类

全部博文(93)

文章存档

2011年(12)

2010年(38)

2009年(20)

2008年(23)

分类: 系统运维

2010-05-28 15:38:58

开发环境:Eclipse3.2+MyEclipse5.01GA;框架使用:Struts+Spring+Hibernate
在Employee数据库中有三个表:goodsinfo(商品表)、storage(库存表)、warehouseinfo(仓库表)
goodsinfo表结构:
goodsId(主键)
goodsName
price
unit
cateid
safetyamt

storage:
goodsId(主键)
whId(主键)
cargospace
storage

warehouseinfo:
Id
whId(主键)
whName
whAddress
whCharge

在应用程序中需要查询库存量小于安全存量的详细信息,包括条形码和商品名称,要完成这样的查询需要较长较复杂的SQL代码,与其在程序中书写代码不如在数据库建立一个视图来简化程序的操作,其SQL代码如下:
create view needpurchase AS (select a.goodsId,a.goodsName,c.whName,b.cargospace,b.storage,a.safetyamt from Goodsinfo a,Storage b,Warehouseinfo c where a.goodsId=b.goodsId and b.whId=c.whId and b.storage
以上的SQL语句创建了一个名为employeedetialinfo的视图。
现在需要用Hibernate对视图进行映射,生成可持久化类对象。注意:在Hibernate3之后才支持对视图的操作,Hibernate2并不支持如果你的项目中是使用Hibernate2就没必要往下看了。
在Eclipse中切到MyEclipse DataBase Explorer(数据库浏览视图)中打开连接,找到Employee表,选择下面的View子节点,可以看到一个名为employeedetialinfo的视图,鼠标右键点击它,选择“Hibernate Reverse Engineering…”,设置了包路径后,依次钩选“Hibernate Mapping File”、“Java Data Object”(取消钩选“Create abstract class”)以及“Java Data Access Object(DAO)”,在“Java Data Access Object(DAO)”下会自动钩选“Generate precise findby methods”,以及选择“Spring DAO”选项,使用“Spring DAO”后,在DAO类里转而使用了HibernateTemplate对象来操作数据库,可以免去事务管理;这样就生成完持久化类,需要注意的是生成视图映射和生成表映射不一样,因为视图是没有主键的,Hibernate就将视图结构本身做为ID主键,所以你可看到生成出来的文件有四个,分别是
needpurchase o.hbm.xml(映射文件)
needpurchase .java(持久化类文件)
needpurchase Id.java(视图的数据结构类)
needpurchase DAO.java(DAO:Data Access Object用来简化数据操作的类,常用的添加、删除、更新、查询都可以在这个类里得到快速的实现)

如果对表进行映射是没有needpurchase Id这个类文件的。

在Action中的处理代码是这样的:
public class EmployeeDetialAction extends ActionSupport {
   

   
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {       
       NeedpurchaseDAO needdao=new NeedpurchaseDAO();
List allpurchase=needdao.findAll();
request.setAttribute("allpurchase", allpurchase);
return mapping.findForward("success2");
    }
}



前台jsp页面显示代码为
c:forEach items="${allpurchase}" var="all" >
${all.id.goodsId}
${all.id.goodsName}
${all.id.whName}
${all.id.cargospace}
${all.id.safetyamt}
${all.id.storage}


我的最新网站: 窝窝网赚
阅读(1397) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~