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类代码时一定要重新编译。