Flex4之Tree开发【三】——与JAVA后台交互的树,实现增删改查

来源:互联网 发布:seo如何制作网站地图 编辑:程序博客网 时间:2024/06/04 17:59
 

今天的第三篇文章,把我两天学习的Flex4树的最重要的与实际开发相关的示例总结一下,实现与JAVA后台交互操作也就是增删改功能

第一:首先是MXML主要代码

Xml代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: medium"><?xml version="1.0" encoding="utf-8"?>  
  2. <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"    
  3.          xmlns:s="library://ns.adobe.com/flex/spark"    
  4.          xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"  
  5.          creationComplete="init()">  
  6.     <fx:Script>  
  7.         <![CDATA[  
  8.             import mx.controls.Alert;  
  9.             import mx.rpc.events.ResultEvent;  
  10.             import mx.utils.URLUtil;  
  11.             protected function init():void{  
  12.                 listResult.convertDataToXml();  
  13.             }  
  14.             var xmlList:XML;  
  15.             protected function listResult_resultHandler(event:ResultEvent):void 
  16.             {  
  17.                 xmlList=XML(event.result.toString()); 
  18.                 mytree.dataProvider=xmlList;  
  19.                   
  20.             }  
  21.               
  22.             protected function tree1_clickHandler(event:MouseEvent):void 
  23.             {  
  24.                 if(mytree.selectedItem.hasOwnProperty("@value" )) 
  25.                 {   
  26.                       
  27.                     var u:URLRequest=new URLRequest(mytree.selectedItem.@value); 
  28.                     //navigateToURL(new URLRequest(mytree.selectedItem.@value));  
  29.                     navigateToURL(u);  
  30.                 } else  
  31.                 {   
  32.                     //没有那就展开,如果展开了就收缩  
  33.                     mytree.expandItem(mytree.selectedItem,!mytree.isItemOpen(mytree.selectedItem),true); 
  34.                 }   
  35.             }  
  36.             var child:XML;  
  37.             //添加兄弟节点  
  38.             protected function addBefore():void  
  39.             {  
  40.                 var xml:XML=mytree.selectedItem as XML; 
  41.                 var text:String=nextName.text;  
  42.                 if(xml!=null && text.length>0) {  
  43.                     var parent:XML=xml.parent();  
  44.                     if(parent!=null) {  
  45.                         child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />"); 
  46.                         child.@foddersortName=text; 
  47.                         parent.insertChildBefore(xml,child); 
  48.                         var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+parent.@foddersortId);   
  49.                         /*   
  50.                         也可以是这种方式  
  51.                         var vars: URLVariables = new URLVariables (); 
  52.                         vars["varName"] = varValue; //把参数键,值对放到vars对象中. 
  53.                         vars["var2Name"] = var2Value;  
  54.                         */    
  55.                         var r:URLRequest = new URLRequest();   
  56.                         r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";   
  57.                         r.method = URLRequestMethod.POST;   
  58.                         r.data = v;    
  59.                           
  60.                         var l:URLLoader = new URLLoader();           
  61.                         l.load(r);    
  62.                           
  63.                         l.addEventListener(Event.COMPLETE,txtCompleteHandler); 
  64.                     } else {  
  65.                         Alert.show("不能选中根节点");  
  66.                     }  
  67.                 } else {  
  68.                     Alert.show("需要先选中节点和填入文字");  
  69.                 }  
  70.             }  
  71.               
  72.             private function txtCompleteHandler(e:Event):void   
  73.             {    
  74.                   
  75.                 var l:URLLoader = URLLoader(e.target);   
  76.                 var o:Object = URLUtil.stringToObject(l.data,";",true); 
  77.                 var result:String=o.result;  
  78.                 var operateId:String=o.operateId;  
  79.                 if(operateId!=null){  
  80.                     //Alert.show(o.operateId);  
  81.                     //每次添加完毕节点后,就需要将刚插入数据库中的最大的ID查询出来赋给刚刚新增的XML节点的属性中 
  82.                     child.@foddersortId=operateId;  
  83.                 }  
  84.                   
  85.                 if(result=="update"){  
  86.                     Alert.show("更新成功!");  
  87.                 }else if(result=="delete"){  
  88.                     Alert.show("删除成功!");  
  89.                 }else if(result=="add"){  
  90.                     Alert.show("新增成功!");  
  91.                 }else{  
  92.                     Alert.show("操作失败!");  
  93.                 }  
  94.                   
  95.             }    
  96.               
  97.               
  98.             protected function addAfter():void  
  99.             {  
  100.                 var xml:XML=mytree.selectedItem as XML; 
  101.                 var text:String=nextName.text;  
  102.                 if(xml!=null && text.length>0) {  
  103.                     var parent:XML=xml.parent();  
  104.                     if(parent!=null) {  
  105.                         child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />"); 
  106.                         child.@foddersortName=text; 
  107.                         parent.insertChildAfter(xml,child); 
  108.                           
  109.                         var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+parent.@foddersortId);   
  110.                         /*   
  111.                         也可以是这种方式  
  112.                         var vars: URLVariables = new URLVariables (); 
  113.                         vars["varName"] = varValue; //把参数键,值对放到vars对象中. 
  114.                         vars["var2Name"] = var2Value;  
  115.                         */    
  116.                         var r:URLRequest = new URLRequest();   
  117.                         r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";   
  118.                         r.method = URLRequestMethod.POST;   
  119.                         r.data = v;    
  120.                           
  121.                         var l:URLLoader = new URLLoader();           
  122.                         l.load(r);    
  123.                           
  124.                         l.addEventListener(Event.COMPLETE,txtCompleteHandler); 
  125.                     } else {  
  126.                         Alert.show("不能选中根节点");  
  127.                     }  
  128.                 } else {  
  129.                     Alert.show("需要先选中节点和填入文字");  
  130.                 }  
  131.             }  
  132.               
  133.             protected function addSon():void  
  134.             {  
  135.                 var xml:XML=mytree.selectedItem as XML; 
  136.                 var text:String=nextName.text;  
  137.                 if(xml!=null && text.length>0) {  
  138.                     var parent:XML=xml.parent();  
  139.                     child=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />"); 
  140.                     child.@foddersortName=text;  
  141.                     xml.appendChild(child);  
  142.                     mytree.expandChildrenOf(xml,true); 
  143.                       
  144.                     var v:URLVariables = new URLVariables("method=add&editName="+text+"&parentId="+xml.@foddersortId);   
  145.                     /*   
  146.                     也可以是这种方式  
  147.                     var vars: URLVariables = new URLVariables (); 
  148.                     vars["varName"] = varValue; //把参数键,值对放到vars对象中. 
  149.                     vars["var2Name"] = var2Value;   
  150.                     */    
  151.                     var r:URLRequest = new URLRequest();   
  152.                     r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";   
  153.                     r.method = URLRequestMethod.POST;   
  154.                     r.data = v;    
  155.                       
  156.                     var l:URLLoader = new URLLoader();           
  157.                     l.load(r);    
  158.                       
  159.                     l.addEventListener(Event.COMPLETE,txtCompleteHandler); 
  160.                 } else {  
  161.                     Alert.show("需要先选中节点和填入文字");  
  162.                 }             
  163.             }  
  164.             protected function editNode():void  
  165.             {  
  166.                 var xml:XML=mytree.selectedItem as XML; 
  167.                 var text:String=nextName.text;  
  168.                 if(xml!=null && text.length>0) {  
  169.                     xml.@foddersortName=text;  
  170.                 } else {  
  171.                     Alert.show("需要先选中节点和填入文字");  
  172.                 }  
  173.                   
  174.                 var v:URLVariables = new URLVariables("method=update&editName="+text+"&parentId="+xml.@foddersortId);   
  175.                 /*   
  176.                 也可以是这种方式  
  177.                 var vars: URLVariables = new URLVariables (); 
  178.                 vars["varName"] = varValue; //把参数键,值对放到vars对象中. 
  179.                 vars["var2Name"] = var2Value;   
  180.                 */    
  181.                 var r:URLRequest = new URLRequest();   
  182.                 r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";   
  183.                 r.method = URLRequestMethod.POST;   
  184.                 r.data = v;    
  185.                   
  186.                 var l:URLLoader = new URLLoader();           
  187.                 l.load(r);    
  188.                   
  189.                 l.addEventListener(Event.COMPLETE,txtCompleteHandler); 
  190.             }  
  191.             protected function deleteNode():void  
  192.             {  
  193.                 var xml:XML=mytree.selectedItem as XML; 
  194.                 if(xml!=null) {  
  195.                     var list:Array=mytree.selectedItems as Array; 
  196.                     for(var k:int=0;k<list.length;k++) { 
  197.                         xml=list[k] as XML;  
  198.                         var parent:XML=xml.parent(); 
  199.                         if(parent!=null) {  
  200.                             var children:XMLList=parent.children(); 
  201.                             for(var i:int=0;i<children.length();i++) { 
  202.                                 if(children[i]==xml) { 
  203.                                     delete children[i]; 
  204.                                     var v:URLVariables = new URLVariables("method=delete&parentId="+xml.@foddersortId);   
  205.                                     /*   
  206.                                     也可以是这种方式  
  207.                                     var vars: URLVariables = new URLVariables (); 
  208.                                     vars["varName"] = varValue; //把参数键,值对放到vars对象中. 
  209.                                     vars["var2Name"] = var2Value;  
  210.                                     */    
  211.                                     var r:URLRequest = new URLRequest();   
  212.                                     r.url = "http://localhost:8080/FlexBlazeDS/treeOperate.do";   
  213.                                     r.method = URLRequestMethod.POST;   
  214.                                     r.data = v;    
  215.                                       
  216.                                     var l:URLLoader = new URLLoader();           
  217.                                     l.load(r);    
  218.                                       
  219.                                     l.addEventListener(Event.COMPLETE,txtCompleteHandler); 
  220.                                     break;  
  221.                                 }  
  222.                             }  
  223.                         } else {  
  224.                             Alert.show("不能选中根节点");  
  225.                         }  
  226.                     }  
  227.                 } else {  
  228.                     Alert.show("需要先选中节点");  
  229.                 }             
  230.             }  
  231.             protected function selectNode():void  
  232.             {  
  233.                 var text:String=nextName.text;  
  234.                 if(text.length>0) {  
  235.                     var items:Array=[];  
  236.                     var list:XMLList=new XMLList(); 
  237.                     list[0]=mytree.dataProvider[0];              
  238.                     searchItems(list,text,items);  
  239.                     mytree.selectedItems=items;  
  240.                 } else {  
  241.                     Alert.show("输入查找的文字");  
  242.                 }  
  243.             }  
  244.             private function searchItems(list:XMLList,find:String,items:Array):void { 
  245.                 for(var i:int=0;i<list.length();i++) { 
  246.                     var one:XML=list[i];  
  247.                     var label:String=one.@foddersortName; 
  248.                     if(label!=null && label.indexOf(find)>=0) { 
  249.                         items.push(one);  
  250.                     }  
  251.                     searchItems(one.children(),find,items); 
  252.                 }  
  253.             }  
  254.               
  255.               
  256.               
  257.             protected function closeAll():void{  
  258.                 mytree.openItems=[];  
  259.                   
  260.             }  
  261.               
  262.             protected function openAll():void{  
  263.                 mytree.expandChildrenOf(mytree.selectedItem,true); 
  264.             }  
  265.               
  266.               
  267.               
  268.               
  269.         ]]>  
  270.     </fx:Script>  
  271.     <fx:Declarations>  
  272.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  273.         <s:RemoteObject destination="findName" id="listResult" result="listResult_resultHandler(event)"/>  
  274.     </fx:Declarations>  
  275.     <s:TextInput id="nextName" x="432" y="40"  />  
  276.     <mx:Tree x="30" y="10" width="264" height="600" id="mytree"  showRoot="false" labelField="@foddersortName" ></mx:Tree>  
  277.     <s:Button x="443" y="82" label="增加为哥" click="addBefore()"/>  
  278.     <s:Button x="443" y="111" label="增加为弟" click="addAfter()"/>  
  279.     <s:Button x="444" y="144" click="addSon()" label="增加为孩子"/>  
  280.     <s:Button x="444" y="178" click="editNode()" label="修改节点"/>  
  281.     <s:Button x="444" y="211" click="deleteNode()" label="删除节点"/>  
  282.     <s:Button x="443" y="244" click="selectNode()" label="选择节点"/>  
  283.     <s:Button x="443" y="277" click="closeAll()" label="全部收缩"/>  
  284.     <s:Button x="443" y="306" click="openAll()" label="全部展开"/>  
  285. </s:Group>  
  286. </SPAN>  

 

这里写的是组件形式,在主程序中调用下文件名,如这个叫做FlexTree.mxml,其位于components目录下

那么在主程序中应该这样写

 <components:FlexTree/>

就是这么一小行代码就可以执行主程序显示树了

 

第二:web-info/flex/remoteConfig.xml中关键配置

<destination id="findName" >
     <properties>
        <source>com.jadetrust.test.FindTreeNode</source>
     </properties>
     </destination>

 

第三:后台两个主要处理程序,一个是用来查询所有树节点拼装XML的程序FindTreeNode.java

Java代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: medium">//把数据库中的无限级联表中数据拼装成一个XML文档  
  2.     public String convertDataToXml()   
  3.     {   
  4.        UserService sf=new UserService();   
  5.        List<TCategory> cates=sf.findCategoriesAll();   
  6.        System.out.println(cates);   
  7.        List<TCategory> listTop=sf.findCategoriesTop();   
  8.        String treedata="<?xml version='1.0' encoding='utf-8'?>\n<node foddersortId='0' foddersortName='所有分类'>\n";   
  9.       for(TCategory cate:listTop){   
  10.         treedata=treedata+"<node foddersortId='"+cate.getCateId() +"' foddersortName='"+cate.getName()+"'>\n";   
  11.         treedata=CreateXmlNode(cates,cate.getCateId(),treedata);   
  12.         treedata=treedata+"</node>\n";   
  13.     }   
  14.     treedata=treedata+"</node>\n";   
  15.        
  16.   
  17.     System.out.println(treedata);   
  18.     return treedata;   
  19.     }   
  20.     /**  
  21.     * 递归解析list –> Xml  
  22.     */  
  23.     public String CreateXmlNode(List<TCategory> list,int nodepid,String cratedata){   
  24.     for (int a=0;a<list.size();a++)   
  25.     {   
  26.     TCategory cate=list.get(a);   
  27.        
  28.     if(cate.getTCategory()==null || cate.getTCategory().equals("")){   
  29.          
  30.     }else{   
  31.     if (cate.getTCategory().getCateId()==nodepid){   
  32.     if(cate.getTCategories()!=null){   
  33.     cratedata=cratedata+"<node foddersortId='"+cate.getCateId() +"' foddersortName='"+cate.getName()+"' parentid='"+cate.getTCategory().getCateId()+"'>\n";   
  34.     cratedata=CreateXmlNode(list,cate.getCateId(),cratedata);   
  35.     cratedata=cratedata+"</node>\n";   
  36.     }else{   
  37.     cratedata=cratedata+"<node foddersortId='"+cate.getCateId()+"'foddersortName='"+cate.getName()+"' parentid='"+cate.getTCategory().getCateId()+"'/>\n";   
  38.     }   
  39.     }   
  40.     }   
  41.     }   
  42.     return cratedata;   
  43.     }   
  44.     </SPAN>  

 

还有一个处理增删改的servleet程序

 

Java代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: medium">public void doPost(HttpServletRequest request, HttpServletResponse response)   
  2.             throws ServletException, IOException {   
  3.         System.out.println("执行了树操作。。。。。。。。。。。。。。。");   
  4.         request.setCharacterEncoding("utf-8");   
  5.          String childName=request.getParameter("editName");   
  6.          String parentId=request.getParameter("parentId");   
  7.          String method=request.getParameter("method");   
  8.         UserService sf=new UserService();   
  9.          response.setCharacterEncoding("utf-8");   
  10.          try{   
  11.          if(method.equals("delete")){   
  12.              System.out.println("此次删除的ID为"+parentId);   
  13.               if(parentId!=null){   
  14.                   TCategory cate1=sf.findById(parentId);   
  15.                   System.out.println(cate1);   
  16.                   sf.delete(cate1);   
  17.                   response.getWriter().write("result=delete");   
  18.               }   
  19.                 
  20.          }else if(method.equals("update")){   
  21.              System.out.println("此次更新的ID为"+parentId);   
  22.              if(childName!=null&&parentId!=null){   
  23.                   TCategory cate1=sf.findById(parentId);   
  24.                   cate1.setName(childName);   
  25.                   System.out.println(cate1);   
  26.                   sf.update(cate1);   
  27.                   response.getWriter().write("result=update");   
  28.              }   
  29.          }else if(method.equals("add")){   
  30.               if(childName!=null&&parentId!=null){   
  31.                   TCategory category=new TCategory();   
  32.                      category.setName(childName);   
  33.                      TCategory cate1=sf.findById(parentId);   
  34.                      category.setTCategory(cate1);   
  35.                      sf.add(category);   
  36.                      Integer lastId=sf.findLastId();   
  37.                      response.getWriter().write("result=add;operateId="+lastId);   
  38.               }   
  39.      
  40.          }   
  41.          }catch(Exception e){   
  42.              System.out.println(e.toString());   
  43.               response.getWriter().write("result=error");   
  44.          }   
  45.     }</SPAN>  

 

第三,就是介绍相关的数据库表的结构了MYSQL

CREATE TABLE `t_category` (
  `name` varchar(255) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `cate_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`cate_id`),
  KEY `parent_id` (`parent_id`),
  CONSTRAINT `t_category_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `t_category` (`cate_id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8;

 

对应的Category实体类

 

Java代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: medium">package com.jadetrust.dao;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashSet;   
  5. import java.util.List;   
  6. import java.util.Set;   
  7.   
  8. import javax.persistence.CascadeType;   
  9. import javax.persistence.Column;   
  10. import javax.persistence.Entity;   
  11. import javax.persistence.FetchType;   
  12. import javax.persistence.GeneratedValue;   
  13. import javax.persistence.Id;   
  14. import javax.persistence.JoinColumn;   
  15. import javax.persistence.ManyToOne;   
  16. import javax.persistence.OneToMany;   
  17. import javax.persistence.Table;   
  18.   
  19. /**  
  20.  * TCategory entity. @author MyEclipse Persistence Tools 
  21.  */  
  22. @Entity  
  23. @Table(name = "t_category", catalog = "test")   
  24. public class TCategory implements java.io.Serializable {   
  25.   
  26.     // Fields   
  27.   
  28.     @Override  
  29.     public String toString() {   
  30.         return "[ cateId=" + cateId + ", name=" + name + "]";   
  31.     }   
  32.   
  33.     private Integer cateId;   
  34.     private TCategory TCategory;   
  35.     private String name;   
  36.     private Set<TCategory> TCategories = new HashSet<TCategory>(0);   
  37.   
  38.     // Constructors   
  39.   
  40.     /** default constructor */  
  41.     public TCategory() {   
  42.     }   
  43.   
  44.     /** full constructor */  
  45.     public TCategory(TCategory TCategory, String name,   
  46.             Set<TCategory> TCategories) {   
  47.         this.TCategory = TCategory;   
  48.         this.name = name;   
  49.         this.TCategories = TCategories;   
  50.     }   
  51.   
  52.     // Property accessors   
  53.     @Id  
  54.     @GeneratedValue  
  55.     @Column(name = "cate_id", unique = true, nullable = false)   
  56.     public Integer getCateId() {   
  57.         return this.cateId;   
  58.     }   
  59.   
  60.     public void setCateId(Integer cateId) {   
  61.         this.cateId = cateId;   
  62.     }   
  63.   
  64.     @ManyToOne(fetch = FetchType.LAZY)   
  65.     @JoinColumn(name = "parent_id")   
  66.     public TCategory getTCategory() {   
  67.         return this.TCategory;   
  68.     }   
  69.   
  70.     public void setTCategory(TCategory TCategory) {   
  71.         this.TCategory = TCategory;   
  72.     }   
  73.   
  74.     @Column(name = "name")   
  75.     public String getName() {   
  76.         return this.name;   
  77.     }   
  78.   
  79.     public void setName(String name) {   
  80.         this.name = name;   
  81.     }   
  82.   
  83.     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "TCategory")   
  84.     public Set<TCategory> getTCategories() {   
  85.         return this.TCategories;   
  86.     }   
  87.   
  88.     public void setTCategories(Set<TCategory> TCategories) {   
  89.         this.TCategories = TCategories;   
  90.     }   
  91.        
  92.        
  93.                                          
  94. }</SPAN>  

 

第四:具体数据库操作类UserService

Java代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: medium">package com.jadetrust.service.impl;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashMap;   
  5. import java.util.List;   
  6. import java.util.Map;   
  7. import java.util.Set;   
  8.   
  9. import org.hibernate.Session;   
  10. import org.hibernate.Transaction;   
  11.   
  12. import com.jadetrust.common.HibernateSessionFactory;   
  13. import com.jadetrust.dao.TCategory;   
  14.   
  15. public class UserService {   
  16.   
  17.     public void add(TCategory cate){   
  18.         Session session=HibernateSessionFactory.getSession();   
  19.         Transaction tc=session.beginTransaction();   
  20.         session.save(cate);   
  21.         tc.commit();   
  22.         session.close();   
  23.            
  24.     }   
  25.     public void delete(TCategory cate){   
  26.         Session session=HibernateSessionFactory.getSession();   
  27.         Transaction tc=session.beginTransaction();   
  28.         session.delete(cate);   
  29.         tc.commit();   
  30.         session.close();   
  31.     }   
  32.     public void update(TCategory cate){   
  33.         Session session=HibernateSessionFactory.getSession();   
  34.         Transaction tc=session.beginTransaction();   
  35.         session.merge(cate);   
  36.         tc.commit();   
  37.         session.close();   
  38.     }   
  39.     public TCategory findById(String id){   
  40.         String hql = "from TCategory where cateId=:id";   
  41.         return (TCategory)HibernateSessionFactory.getSession().createQuery(hql).setString("id", id).uniqueResult();   
  42.     }   
  43.        
  44.     public List<TCategory> findChildCategories(String id) {   
  45.         if(id.equals("cate_root")||id==null||id.equals(" ")){   
  46.              return findCategoriesTop();   
  47.         }else{   
  48.             return HibernateSessionFactory.getSession().   
  49.             createQuery("from TCategory cate where cate.TCategory.cateId=:id").setString("id", id).list();   
  50.         }   
  51.     }   
  52.     public List<TCategory> findCategoriesTop() {   
  53.         System.out.println("查询顶级父目录.................");   
  54.         String hql = "select distinct cate,childs from TCategory cate left join fetch cate.TCategories childs where cate.TCategory.cateId is null";   
  55.         return HibernateSessionFactory.getSession().createQuery(hql).list();   
  56.     }   
  57.     public List<TCategory> findCategoriesAll() {   
  58.         System.out.println("查询顶级父目录.................");   
  59.         String hql = "from TCategory";   
  60.         return HibernateSessionFactory.getSession().createQuery(hql).list();   
  61.     }   
  62.     public List<Map<String,String>> findNameById(String id){   
  63.         List<Map<String,String>> names=new ArrayList<Map<String,String>>();   
  64.            
  65.         UserService sf=new UserService();   
  66.         Set<TCategory> cates=sf.findById(id).getTCategories();   
  67.         for(TCategory cate:cates){   
  68.             Map<String,String> maps=new HashMap<String,String>();   
  69.             maps.put("CATALOGSID", cate.getCateId().toString());   
  70.             maps.put("CATALOGNAME", cate.getName());   
  71.             names.add(maps);   
  72.         }   
  73.         return names;   
  74.            
  75.     }   
  76.        
  77.     public Integer findLastId(){   
  78.         String hql="select max(cateId) from TCategory";   
  79.         return (Integer)HibernateSessionFactory.getSession().createQuery(hql).uniqueResult();   
  80.     }   
  81. }</SPAN>  

 

这个示例只用了Hibernate,至于这个HibernateSessionFactory,它是利用MyEclipse反转数据库自动生成的,如果不知道可以参考我之前关于数据库反转的文章

 

相关视图



 

 

 

这个是选择节点,输入插入内容,点击选择节点按钮