30天学通Java Web项目案例开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.8 商品资料管理模块

前面对系统的首页进行了开发,本节将对商品的管理功能进行开发,实现对商品的增、删、改、查等操作,商品资料管理页面如图2-16所示。

图2-16 商品资料管理页面

2.8.1 商品资料管理页面的实现

当用户在首页单击“商品资料”时,会向Servlet传送“search”动作,将商品列表第一页的内容搜索出来,并传送到客户端。在本节中将会对该动作进行开发,但在搜索前首先要实现页面的设计,详细代码如下所示。

代码位置:见光盘中本章源代码的goodsmanage.jsp

    1        ……<!-- 此处省略了一此包的导入及标题 -->
    2        <% List<GoodsInfo> goodslist = (List<GoodsInfo>)request.getAttribute
("goodslist"); %>
    3        <link rel=stylesheet href="css/general.css" type="text/css">
    4        <script language="JavaScript" src="script/trim.js"></script>
    5        <script language="JavaScript">
    6     function check(){
    7             var key = document.all.key.value.trim();             //得到搜索的关键字
    8             if(key==""){                                         //当关键字为空时
    9                   alert("关键字为空,请重新输入!!!");             //弹出提示对话框
    10                  return false;                                  //返回false
    11            }
    12            return true;
    13    }
    14    function checkPage(temp){                                    //判断跳转页是否合法
    15            var page = document.all.page.value.trim();           //得到跳转的页数
    16            var reg = /^[1-9][0-9]*$/;                          //声明正则式
    17            if((reg.test(page.trim()))&&(page<=temp)){          //匹配正则式时
    18                  return true;
    19            }
    20            else{                                                //不匹配时
    21                  alert("输入不合法,请重新输入!!!");             //弹出对话框
    22                  return false;
    23       } }
    24       </script>
    25       ……<!-- 此处省略了一些页面搭建的代码 -->
    26       <hr size="1" width="100%" color="black"/>
    27       <% if(goodslist.isEmpty()){
    28            out.println("<br/><br/><br/><center><h2>没有搜索到你要的商品!!!</h2>
</center>");
    29            }else{ %>
    30       <table width="100%" border="0" cellspacing="1" bgcolor="black">
    31    <tr bgcolor="#D1F1FE" align="center">
    32         <th>商品名称</th><th>类别</th><th>进价</th><th>售价</th><th>单位</th>
    33            <th>数量</th><th>查看/修改</th><th>删除</th></tr>
    34       <%  WebApplicationContext wac=                           //获取应用上下文
    35         WebApplicationContextUtils.getWebApplicationContext(this.getServlet
Context());
    36       DButil db = (DButil)wac.getBean("DButil");      //得到数据操纵类引用
    37       int i = 0;                                      //用来标志是奇行还是偶行
    38       for(GoodsInfo gi:goodslist){                    //循环商品列表
    39       String gname = gi.getGname();                   //得到商品名字
    40       String gcid = gi.getGcid();                     //得到商品类别ID
    41       GoodsClassInfo gci=(GoodsClassInfo)db.getObject("GoodsClassInfo",gcid);
    42       int gamount = gi.getGamount();                      //得到商品数量
    43       String gunit = gi.getGunit();                       //得到商品单位
    44       double gpin = gi.getGpin();                         //得到进价
    45       double gpout = gi.getGpout();                       //得到售价
    46       if(i%2==0){                                         //当是偶数行时
    47           i++;
    48           out.println("<tr bgcolor='white' align='center'>");
    49       }else{   i++;                                       //当是奇数行时
    50           out.println("<tr bgcolor='#EBF5FD' align='center'>"); } %>
    51       <td><%= new String(gname.getBytes("ISO-8859-1"),"gbk") %></td>
    52       <td><%= new String((gci.getGcname()).getBytes("ISO-8859-1"),"gbk")%></td>
    53       <td>¥<%= gpin %></td><td>¥<%= gpout %></td>
    54       <td><%= new String(gunit.getBytes("ISO-8859-1"),"gbk") %></td>
    55       <td><%= gamount %></td>
    56       <td><a href="ManageServlet?action=lookGoods&gid=<%= gi.getGid() %>"
    57                target="mainFrame">查看/修改</a></td>
    58       <td><a  href="JavaScript:delete_sure('ManageServlet?action=deleteGoods&
gid=<%= gi.getGid()%>')"
    59                target="mainFrame">删除</a></td>
    60    </tr><%} %></table>
    61  ……<!-- 此处省略了分页的代码,请读者参阅光盘中本章源代码goodsmanage.jsp -->
    62  <% }%> </body></html>

● 第2行接收Servlet端传过来要显示的商品列表。

● 第6~13行是当用户搜索时,对输入的关键字合法性的验证;第14~23行是当用户进行换页时,对输入的目的页数的合法性判断。

● 第34~45行是循环商品列表,得到各个商品的具体信息。其中第34~35行得到WebApplicationContext对象,第36行得到受管的Bean,第41行得到商品类别对象。● 第46~50行根据奇偶行的不同,显示不同的背景色;第61行处省略了实现分页功能的代码。

2.8.2 业务方法的实现

对商品进行操作前,要先将商品类和数据库中的商品表相映射,请在本应用的WEB-INF/classess目录下创建GoodsInfo.hbm.xml文件,在该件中将商品类的各属性和商品表的各字段相对应,其设置和AdminInfo.hbm.xml相似,并在appcontext.xml文件中,将该文件的映射解注释。

说明:由于对这些映射的配置比较类似,在此不再列举源代码,请读者自行查阅光盘中本章源文件GoodsInfo.hbm.xml和appcontext.xml中的配置。

在上一节中实现了商品管理界面的开发,其接收服务器端传递过来的一个商品列表,并将其显示出来。本节将开发此过程中所要用到的一些业务方法,并将这些方法添加到DButil类中,具体代码如下所示。

代码位置:见光盘中本章源代码的DButil.java

1   public List<?> getPageContent(String hql,int page,int span){ //得到某页的内容
2        List temp = new ArrayList();               //创建list,用来存放页面内容
3        Session sess = sf.openSession();             //创建会话
4        Query q = sess.createQuery(hql);             //执行查询
5        List list = q.list();                        //得到结果
6        int i = 0;                                   //标志位,用来记录条数
7        while((page-1)*span+i<list.size()&&i<span){
8            temp.add(list.get((page-1)*span+i));    //将结果添加到temp中
9            i++;                                     //标志位自加
10       }
11       sess.close();
12       return temp;                                 //将结果返回
13  }
14  public int getTotalPage(String hql,int span){     //用来得到总页数
15       Session sess = sf.openSession();             //创建会话
16       Query q = sess.createQuery(hql);             //执行查询
17       List<Long> list = q.list();                //得到结果列表
18       int count = (list.get(0)).intValue();        //得到总记录条数
19       int page = (count%span==0)?(count/span):(count/span+1); //得到总页数
20       sess.close();
21       return page;                                 //将总页数返回
22  }
23  public Object getObject(String tablename,String id){
24       Session sess = sf.openSession();             //创建会话
25       Object obj = null;                           //声明引用
26       if(tablename.equals("GoodsInfo")){           //当得到商品对象时
27           obj = sess.get(GoodsInfo.class,id);      //得到对象
28       }
29       sess.close();                                //关闭会话
30       return obj;                                  //返回对象
31  }

● 第1~13行得到某一页要显示的内容,第3行打开会话,第4行进行查询,第5行得到查询的结果,第7~10行得到页面内容并将其添加到列表中。

● 第14~23行用来计算查询结果的总页数,其中第18行得到总记录数,第19行得到总的页数。

● 第23~31行得到某一对象,第26~27行是当得到的对象为GoodsInfo类对象时,通过映射的主键得到该对象。

2.8.3 商品搜索及换页动作的实现

上一节实现了搜索及换页过程中所需要的一些业务方法,本节将对这两个动作进行实现,请在ManageServlet.java类中的doPost方法的最后添加这些代码,具体如下所示。

代码位置:见光盘中本章源代码的ManageServlet.java

1   else if(action.equals("search")){                        //请求动作为搜索时
2        String key = request.getParameter("key").trim();    //得到搜索关键字
3        String type = request.getParameter("type").trim();  //得到搜索类
4        userBean.setNowPage(1);                             //设置当前页
5        key = new String(key.getBytes(),"ISO-8859-1");      //将关键字转码
6        String hql = "";                                    //记录搜索内容
7        String tp = "";                                     //记录搜索内容总页数
8        String url = "";                                    //用来存放跳转地址
9        if(type.equals("goodsinfo")){                       //当搜索商品表时
10           String myradio = request.getParameter("myradio");   //得到搜索的类型
11           if(myradio!=null&&myradio.trim().equals("class")){  //当按类别搜索时
12               hql = "from GoodsInfo as gi where gi.gcid in "+
13                        "(select gc.gcid from GoodsClassInfo as "+ //搜索符合要求的商品的HQL
14                        "gc where gc.gcname like '%"+key+"%')";
15               tp = "select count(*) from GoodsInfo as gi where gi.gcid in "+
16                        "(select gc.gcid from GoodsClassInfo as"+//搜索总页数的HQL
17                        "gc where gc.gcname like '%"+key+"%')";
18           }
19           else{                                       //当按名称搜索时
20               hql = "from GoodsInfo where gname like '%"+key+"%'";
                                                         //搜索符合要求的商品的HQL
21               tp="select count(*)from GoodsInfo where gname like'%"+key+"%'";
22           }
23           url = "/goodsmanage.jsp";                   //跳转页面
24       }
25       userBean.setHql(hql);                           //记住当前搜索的HQL语句
26       userBean.setPageHql(tp);                        //记住搜索总页数的HQL
27       int totalPage = db.getTotalPage(tp,userBean.getSpan()); //得到总页数
28       userBean.setTotalPage(totalPage);               //记住当前总页数
29       List list=db.getPageContent(hql,userBean.getNowPage(),userBean.getSpan());
30       request.setAttribute("goodslist",list);         //将页面内容放入请求中
31       ServletContext sc = getServletContext();        //得到上下文
32       RequestDispatcher rd = sc.getRequestDispatcher(url);
33       rd.forward(request,response);                   //页面跳转
34  }
35  else if(action.equals("changePage")){
36       String page = request.getParameter("page").trim();  //得到要跳转到的页数
37       String url = request.getParameter("pagename").trim(); //得到页面的名字
38       userBean.setNowPage(Integer.parseInt(page));        //记录页数
39       List goodslist = db.getPageContent(userBean.getHql(),
40                            userBean.getNowPage(),userBean.getSpan());
                                                             //得到商品列表
41       request.setAttribute("goodslist",goodslist);        //将列表放入请求中
42       ServletContext sc = getServletContext();            //得到上下文
43       RequestDispatcher rd = sc.getRequestDispatcher(url);
44       rd.forward(request,response);                       //页面跳转
45  }

● 第2行得到搜索的关键字,第3行得到搜索的类的标识符,第4行设置当前页为第1页,第5行中由于MySQL不支持中文,故需将关键字转码。

● 第11~22行按照不同的搜索类型得到不同的HQL,其中第11~18行是按照类别进行搜索时的HQL语句,第19~22行是按照商品名称进行搜索时的HQL语句。

● 第27行得到按照该搜索得到的总页数,第29行得到第一页中的商品列表。

● 第35~45行是对换页动作的实现,第37行用来得到要跳转到的页面,故在后续的开发过程中,不需要再开发分换页动作的实现,直接调用即可。

说明:上述代码中用到的UserBean用来记录用户的当前状态,该类只有一些属性,并对这些属性实现了set及get方法,实现比较简单,在此不再赘述,请读者自行查阅光盘中本章源代码的UserBean.java类。

2.8.4 商品的添加和查看

上一节对商品搜索和换页动作进行了实现,本节将实现商品的添加和查看功能,由于添加商品的页面比较简单,在此不再进行介绍,读者可参阅光盘中本章源代码的addgoods.jsp。下面将介绍Servlet端对添加商品的处理,请在ManageServlet.java类中的doPost方法的最后添加如下代码。

代码位置:见光盘中本章源代码的ManageServlet.java

    1   else if(action.equals("addGoods")){                     //当动作为添加商品时
    2        String gname = request.getParameter("gname").trim();    //得到商品名称
    3        String gcname = request.getParameter("gcname").trim();  //得到商品类别
    4        String gunit = request.getParameter("gunit").trim();    //得到商品单位
    5        String pin = request.getParameter("gpin").trim();       //得到商品进价
    6        String pout = request.getParameter("gpout").trim();     //得到商品售价
    7        String amount = request.getParameter("gamount").trim(); //得到商品数量
    8        String gid = db.getId("GoodsInfo","gid");               //得到商品的ID
    9        gname = new String(gname.getBytes(),"ISO-8859-1");      //转码
    10       gcname = new String(gcname.getBytes(),"ISO-8859-1");    //转码
    11       String hql = "select gg.gcid from GoodsClassInfo as gg where gg.gcname=
'"+gcname+"'";
    12       String gcid = (String)((db.getInfo(hql)).get(0));       //得到类别ID
    13       String temp = "from GoodsInfo as gi where gi.gname='"+gname+"'";
    14       List li = db.getInfo(temp);                             //得到搜索列表
    15       String url = "";                                //用于存放跳转页面
    16       if(li.isEmpty()){                               //当列表为空时,添加该商品
    17           gunit = new String(gunit.getBytes(),"ISO-8859-1");  //转码
    18           double gpin = Double.parseDouble(pin);     //将字符串转为双精度型
    19           double gpout = Double.parseDouble(pout);   //将字符串转为双精度型
    20           int gamount = Integer.parseInt(amount);    //将字符串转为整型
    21           GoodsInfo gi=new GoodsInfo(gid,gname,gcid,gunit,gpin,gpout,gamount);
    22           dbin.insertTable("GoodsInfo",gi);          //更新表格
    23           int totalPage=db.getTotalPage(userBean.getPageHql(),userBean.getSpan());
    24           userBean.setTotalPage(totalPage);          //记住当前总页数
    25           List goodslist = db.getPageContent(userBean.getHql(),
    26                        userBean.getNowPage(),userBean.getSpan()); //得到商品列表
    27           request.setAttribute("goodslist",goodslist);//将列表放到请求中
    28           url = "/goodsmanage.jsp";
    29       }
    30       else{                                           //当列表不为空时
    31           url = "/info.jsp";                         //设置目的页面
    32           String msg = "该物品已经存在,不可添加!!!";     //设置提示信息
    33           request.setAttribute("msg",msg);           //将提示信息放入请求中
    34       }
    35       ServletContext sc = getServletContext();        //得到上下文
    36       RequestDispatcher rd = sc.getRequestDispatcher(url);
    37       rd.forward(request,response);                   //页面跳转
    38  }
    39  else if(action.equals("lookGoods")){
    40       String gid = request.getParameter("gid").trim();//得到商品ID
    41       GoodsInfo gi = (GoodsInfo)db.getObject("GoodsInfo",gid);//得到商品对象
    42       request.setAttribute("object",gi);              //将商品对象放入请求中
    43       ServletContext sc = getServletContext();        //得到上下文
    44       RequestDispatcher rd = sc.getRequestDispatcher("/modifygoods.jsp");
    45       rd.forward(request,response);                   //页面跳转
    46  }

● 第2~10行得到所要添加商品的各种信息,其中第8行调用了DButil类的getId方法,将在下面进行介绍,第9~10行对得到的商品名称和类别进行转码。

● 第13~14行用来判断要添加的该商品是否已经存在,若存在,则得到的列表将不为空,若不存在,则列表为空,并可以添加该商品。

● 第16~29行为当该商品不存在时,添加该商品。其中第22行调用了dbin的insertTable方法,其将会在下面进行介绍。

● 第39~46行是对查看动作的实现,第40行得到该商品的ID,第41行得到该对象。

上面的代码调用了DButil类的getId方法,下面将对其进行介绍,请在DButil类中添加该方法,具体代码如下所示。

代码位置:见光盘中本章源代码的DButil.java

1   public String getId(String tablename,String columnname){
2        Session sess = sf.openSession();                      //创建会话
3        String hql = "select Max("+columnname+") from "+tablename;
4        Query q = sess.createQuery(hql);                      //进行查询
5        List<String> result = q.list();                     //得到结果列表
6        if(result.get(0)==null){                              //当表中没有记录时
7            return "10001";
8        }
9        int id = Integer.parseInt(result.get(0));             //将ID转化为整型
10       id++;                                                 //将ID自加
11       sess.close();
12       return Integer.valueOf(id).toString();                //返回ID
13  }

说明:该方法用来得到表中某一列的最大值,并使其自加,作为下一条记录的主键返回,第3行为搜索某列最大值的HQL语句。

得到添加商品的主键后,就可以向数据库中添加该记录了,添加记录用到了DBinsert类的insertTable方法,由于DBinsert类作为Spring类的一个受管Bean,故在使用前需要对其进行配置。请在Spring的配置文件appcontext.xml文件中的“</beans>”标记之前添加如下代码:

<bean id="DBinsert" class="wyf.zrk.DBinsert">
<property name="sf">
    <ref local="sessionFactory" />         <!--将会话工厂注入到该类中-->
</property>
<property name="db">
    <ref local="DButil" />                 <!-- 将数据操纵类注入到该类中 -->
</property>
</bean>

配置好文件后,就可以对insertTable方法进行开发了,具体代码如下所示。

代码位置:见光盘中本章源代码的DBinsert.java

1   public class DBinsert{
2        private SessionFactory sf;                      //声明会话工厂引用
3        private DButil db;                              //声明数据库操纵类的引用
4        public SessionFactory getSf(){return this.sf;}  //获取会话工厂的方法
5        public void setSf(SessionFactory sf){this.sf = sf;} //设置会话工厂的方法
6        public DButil getDb(){return this.db;}
7        public void setDb(DButil db){this.db = db;}
8        public void insertTable(String tablename,Object obj){   //用来保存对象
9            Session sess = sf.openSession();                    //创建会话
10           Transaction t = sess.beginTransaction();            //创建一个事务
11           if(tablename.equals("GoodsInfo")){                  //当为商品时
12               GoodsInfo gi = (GoodsInfo)obj;                  //强制类型转换
13               sess.save(gi);                                  //保存对象
14           }
15           t.commit();                                         //提交事务
16           sess.close();                                       //关闭会话
17  }}

● 第2~3行是对声明了两个注入的对象的引用,第4~7行是设置这两个属性的set和get方法。

● 第11~14行为当要添加的对象为GoodsInfo类时,将其保存到数据库。此处为if语句,在以后的开发中,要添加其他类对象时,直接在后面写else语句即可。

2.8.5 商品的修改及删除

上一节中实现了商品的添加功能,本节将开发商品的修改及删除功能。由于修改类和删除类作为Spring的受管Bean类来使用,故需要对其进行配置,请在Spring的配置文件appcontext. xml文件中“</beans>”标记之前添加如下配置:

<bean id="DBupdate" class="wyf.zrk.DBupdate">
    <property name="sf">
          <ref local="sessionFactory" />     <!--将会话工厂注入到该类中-->
    </property>
    <property name="db">
    <ref local="DButil" />                   <!-- 将数据库操纵类注入到该类中 -->
    </property>
  </bean>
  <bean id="DBdelete" class="wyf.zrk.DBdelete">
    <property name="sf">
          <ref local="sessionFactory" />     <!--将会话工厂注入到该类中-->
    </property>
    <property name="db">
    <ref local="DButil" />                   <!-- 将数据操纵类注入到该类中 -->
    </property>
  </bean>

配置完成后,就可以开发商品的修改和删除功能了,由于修改商品的界面和添加界面基本类似,本书由于篇幅所限,不再介绍,请读者参阅光盘中本章源代码的modifygoods.jsp。下面将开发Servlet端对修改和删除商品的处理代码,请在ManageServlet.java类的doPost方法最后添加如下代码。

代码位置:见光盘中本章源代码的ManageServlet.java

    1   else if(action.equals("modifyGoods")){                   //当动作为修改商品时
    2        String gid = request.getParameter("gid").trim();    //得到商品的ID
    3        String gname = request.getParameter("gname").trim();    //得到商品名称
    4        String gcname = request.getParameter("gcname").trim();  //得到商品类别
    5        String gunit = request.getParameter("gunit").trim();    //得到商品单位
    6        String pin = request.getParameter("gpin").trim();       //得到商品进价
    7        String pout = request.getParameter("gpout").trim();     //得到商品售价
    8        String amount = request.getParameter("gamount").trim(); //得到商品数量
    9        gname = new String(gname.getBytes(),"ISO-8859-1");      //转码
    10       gcname = new String(gcname.getBytes(),"ISO-8859-1");    //转码
    11       gunit = new String(gunit.getBytes(),"ISO-8859-1");      //转码
    12       double gpin = Double.parseDouble(pin);          //将字符串转为double型
    13       double gpout = Double.parseDouble(pout);        //将字符串转为double型
    14       int gamount = Integer.parseInt(amount);         //将字符串转为整型
    15       String hql = "select gcid from GoodsClassInfo where gcname='"+gcname+"'";
    16       String gcid = (String)((db.getInfo(hql)).get(0));   //得到类别ID
    17       GoodsInfo gi = new GoodsInfo(gid,gname,gcid,gunit,gpin,gpout,gamount);
    18       dbup.updateTable("GoodsInfo",gi,gid);               //执行更新
    19       List goodslist = db.getPageContent(userBean.getHql(),
    20                            userBean.getNowPage(),userBean.getSpan());
    21       request.setAttribute("goodslist",goodslist);        //将列表放入请求中
    22       ServletContext sc = getServletContext();            //得到上下文
    23       RequestDispatcher rd = sc.getRequestDispatcher("/goodsmanage.jsp");
    24       rd.forward(request,response);                       //页面跳转
    25  }
    26  else if(action.equals("deleteGoods")){                   //当动作为删除商品时
    27       String gid = request.getParameter("gid").trim();    //得到商品ID
    28       dbde.deleteTable("GoodsInfo",gid);                  //执行删除
    29       inttotalPage=db.getTotalPage(userBean.getPageHql(),userBean.getSpan());
    30       userBean.setTotalPage(totalPage);                   //记住当前总页数
    31       userBean.setNowPage(1);                             //设置当前页为1
    32       List goodslist = db.getPageContent(userBean.getHql(),//得到商品列表
    33                            userBean.getNowPage(),userBean.getSpan());
    34       request.setAttribute("goodslist",goodslist);        //将列表放入请求中
    35       ServletContext sc = getServletContext();            //得到上下文
    36       RequestDispatcher rd = sc.getRequestDispatcher("/goodsmanage.jsp");
    37       rd.forward(request,response);                       //页面跳转
    38  }

● 第2~8行得到修改后商品传送过来的各项信息,第9~11行将值进行转码,第18行执行更新,该方法将在下面进行开发。

● 第27行得到要删除对象的ID,第28行进行删除,第29~31行重新设置当前总页数,并设当前页为第一页,第32~33行得到要显示的商品的列表。

开发完Servlet端的动作后,就需要开发业务方法了,下面开发updateTable方法,具体代码如下所示。

代码位置:见光盘中本章源代码的DBupdate.java

1   public class DBupdate{
2        private SessionFactory sf;                      //声明会话工厂类引用
3        private DButil db;                              //声明数据操纵类引用
4        public SessionFactory getSf(){return this.sf;}  //获取会话工厂方法
5        public void setSf(SessionFactory sf){this.sf = sf;} //设置会话工厂方法
6        public DButil getDb(){return this.db;}          //获取数据操纵类引用的方法
7        public void setDb(DButil db){this.db = db;}     //设置数据操纵类引用的方法
8        public void updateTable(String tablename,Object obj,String id){
9            Session sess = sf.openSession();            //创建会话
10           Transaction t = sess.beginTransaction();    //开始一个事务
11           if(tablename.equals("GoodsInfo")){          //当表名为GoodsInfo时
12               GoodsInfo gi = (GoodsInfo)sess.get(GoodsInfo.class,id);
13               gi.setGname(((GoodsInfo)obj).getGname());   //修改商品名字
14               gi.setGcid(((GoodsInfo)obj).getGcid());     //修改商品类别号
15               gi.setGunit(((GoodsInfo)obj).getGunit());   //修改商品单位
16               gi.setGpin(((GoodsInfo)obj).getGpin());     //修改商品进价
17               gi.setGpout(((GoodsInfo)obj).getGpout());   //修改商品售价
18               gi.setGamount(((GoodsInfo)obj).getGamount());   //修改商品数量
19               sess.save(gi);                              //保存对象
20           }
21           t.commit();                                     //提交事务
22           sess.close();                                   //关闭会话
23  }}

● 第2~7行是对注入的两个类声明的引用,并设置其对应的set和get方法。

● 第12~19行是得到要修改的对象后,修改相应的属性值并保存。

下面将开发deleteTable方法,具体代码如下所示。

代码位置:见光盘中本章源代码的DBdelete.java

1   public class DBdelete{
2        private SessionFactory sf;                      //声明会话工厂的引用
3        private DButil db;                              //声明数据操纵类引用
4        public SessionFactory getSf(){return this.sf;}  //获取会话工厂的方法
5        public void setSf(SessionFactory sf){this.sf = sf;} //设置会话工厂的方法
6        public DButil getDb(){return this.db;}          //获取数据操纵类引用的方法
7        public void setDb(DButil db){this.db = db;}     //设置数据操纵类引用的方法
8        public void deleteTable(String tablename,String id){
9            Session sess = sf.openSession();           //创建会话
10           Transaction t = sess.beginTransaction();   //开始一个事务
11           if(tablename.equals("GoodsInfo")){         //当表名为GoodsInfo时
12               GoodsInfo gi = (GoodsInfo)sess.get(GoodsInfo.class,id);//得到对象
13               if(gi!=null){sess.delete(gi);}         //删除该对象
14           }
15           t.commit();                                //提交事务
16           sess.close();                              //关闭会话
17  }}

说明:第8~17行用来删除某一对象,第12行得到要删除的对象,第13行为当该对象存在时,将其删掉,第15行为提交事务。

提示:至此为止,对商品的管理已经开发完成,读者可以将各JSP页面、业务代码、配置文件、JavaBean等放置到对应的文件夹下,启动Tomcat,打开浏览器,在地址栏中输入http://localhost:8080/POS即可进行测试,要注意的是当修改了Java类代码时一定要重新编译。