ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美国产大片,美日韩中文字幕,欧美另类精品xxxx孕妇http://www.aygfsteel.com/mintqzy/archive/2007/01/17/94359.html涤生涤生Wed, 17 Jan 2007 02:07:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/17/94359.htmlhttp://www.aygfsteel.com/mintqzy/comments/94359.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/17/94359.html#Feedback0http://www.aygfsteel.com/mintqzy/comments/commentRss/94359.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/94359.html

此文为网¾lœæ–‡ç« å¼•用,原文链接ä¸?/font> http://seagar.javaeye.com/blog/post/189580

¾cÖM¸Ž¾cÕd…³¾pȝš„UML图与代码表现 è¢«è¯„ä¸ø™®ºå›ç²¾åŽè„“(chu¨¤ng)

关键å­? OO   UML,泛化,依赖,å…Œ™”,聚合    

¾cÖM¸Ž¾cÖM¹‹é—´çš„关系对于理解面向对象å…ähœ‰å¾ˆé‡è¦çš„作用åQŒä»¥å‰åœ¨é¢è¯•的时候也¾lå¸¸è¢«é—®åˆ°è¿™ä¸ªé—®é¢˜ï¼Œåœ¨è¿™é‡Œæˆ‘ž®×ƒ»‹¾lä¸€ä¸‹ã€?br />¾cÖM¸Ž¾cÖM¹‹é—´å­˜åœ¨ä»¥ä¸‹å…³¾p?
(1)泛化(Generalization)
(2)å…Œ™”(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)

UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示¾cÖM¸Ž¾cÖM¹‹é—´çš„¾l§æ‰¿å…³ç³»åQŒæŽ¥å£ä¸ŽæŽ¥å£ä¹‹é—´çš„ç‘ô承关¾p»ï¼Œæˆ–ç±»å¯ÒŽ(gu¨©)Ž¥å£çš„å®žçŽ°å…³ç³»ã€‚ä¸€èˆ¬åŒ–çš„å…³¾pÀL˜¯ä»Žå­¾cÀLŒ‡å‘父¾cȝš„åQŒä¸Ž¾l§æ‰¿æˆ–实现的æ–ÒŽ(gu¨©)³•相反ã€?br />[具体表现]
父类 父类实例åQnew 子类()
[UML图](�.1)

å›?.1Animal¾cÖM¸ŽTiger¾c?Dog¾cÈš„æ³›åŒ–关系

[代码表现]

  1. class  Animal{}   
  2. class  Tiger  extends  Animal{}   
  3. public   class  Test   
  4. {   
  5.      public   void  test()   
  6.     {   
  7.         Animal a= new  Tiger();   
  8.     }   
  9. }  

2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例åQŒæˆ–者依赖另一个对象的服务æ—Óž¼Œ˜q™ä¸¤ä¸ªå¯¹è±¡ä¹‹é—´ä¸»è¦ä½“çŽîCؓ依赖关系ã€?br />[具体表现]
依赖关系表现åœ?font color="#ff0000">局部变é‡?/font>åQ?font color="#ff0000">æ–ÒŽ(gu¨©)³•的参æ•?/font>åQŒä»¥åŠå¯¹é™æ€æ–¹æ³•的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依èµ?èžÞZ¸åˆ€(Screwdriver)来帮助你完成拧螺ä¸?screw)的工ä½?br />[UML表现](å›?.2)


å›?.2 Person¾cÖM¸ŽScrewdriver¾cȝš„依赖关系

[代码表现]

  1. public class Person{   
  2.     /** 拧螺丝�/  
  3.     public void screw(Screwdriver screwdriver){   
  4.         screwdriver.screw();   
  5.     }   
  6. }  

3.å…Œ™”(Association)
[å…Œ™”]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系æ—Óž¼Œ˜q™ä¸¤ä¸ªå¯¹è±¡ä¹‹é—´äؓ兌™”关系ã€?br />[具体表现]
å…Œ™”关系是ä‹Éç”?font color="#ff0000">实例变量
来实�br />[现实例子]
æ¯”å¦‚å®¢æˆ·å’Œè®¢å•ï¼Œæ¯ä¸ªè®¢å•å¯¹åº”ç‰¹å®šçš„å®¢æˆøP¼Œæ¯ä¸ªå®¢æˆ·å¯¹åº”一些特定的订单åQ›å†ä¾‹å¦‚公司和员工,每个公司对应一些特定的员工åQŒæ¯ä¸ªå‘˜å·¥å¯¹åº”一特定的公å?br />[UML图] (å›?.3)

å›?.3 公司和员工的兌™”关系


[代码表现]
  1. public class Company{   
  2.     private Employee employee;   
  3.     public Employee getEmployee(){   
  4.         return employee;   
  5.     }   
  6.     public void setEmployee(Employee employee){   
  7.         this.employee=employee;   
  8.     }   
  9.     //公司˜qä½œ   
  10.     public void run(){   
  11.         employee.startWorking();   
  12.     }   
  13. }  
(4)聚合åQˆAggregationåQ?/font>
[聚合]
当对象A被加入到对象Bä¸­ï¼ŒæˆäØ“å¯¹è±¡B的组成部分时åQŒå¯¹è±¡B和对象A之间䏸™šé›†å…³¾p…R€‚聚合是兌™”关系的一¿Uï¼Œæ˜¯è¾ƒå¼ºçš„å…Œ™”关系åQŒå¼ºè°ƒçš„æ˜?font color="#ff0000">整体ä¸?font color="#ff0000">部分
之间的关¾p…R€?br />[具体表现]
与关联关¾pÖM¸€æ øP¼Œèšåˆå…³ç³»ä¹Ÿæ˜¯é€šè¿‡å®žä¾‹å˜é‡æ¥å®žçŽ°è¿™æ ·å…³¾pȝš„。关联关¾pÕd’Œèšåˆå…³ç³»æ¥è¯­æ³•上是没办法区分的,ä»?font color="#ff0000">语义上才èƒ?font color="#ff0000">更好的区åˆ?/font>两者的区别ã€?br />[å…Œ™”与聚合的区别]
(1)å…Œ™”关系所涉及的两个对象是处在同一个层‹Æ¡ä¸Šçš„。比如äh和自行èžRž®±æ˜¯ä¸€¿Uå…³è”å…³¾p»ï¼Œè€Œä¸æ˜¯èšåˆå…³¾p»ï¼Œå› äØ“äºÞZ¸æ˜¯ç”±è‡ªè¡Œè½¦ç»„成的ã€?br />聚合关系涉及的两个对象处于不òq³ç­‰çš„层‹Æ¡ä¸ŠåQŒä¸€ä¸ªä»£è¡¨æ•´ä½“,一个代表部分。比如电(sh¨´)脑和它的昄¡¤ºå™¨ã€é”®ç›˜ã€ä¸»æ¿ä»¥åŠå†…存就是聚集关¾p»ï¼Œå› äØ“ä¸ÀL¿æ˜¯ç”µ(sh¨´)è„‘çš„¾l„成部分ã€?br />(2)对于å…ähœ‰èšé›†å…³ç³»åQˆå°¤å…¶æ˜¯å¼ø™šé›†å…³¾p»ï¼‰çš„两个对象,整体对象会制¾U¦å®ƒçš„组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期åQŒå½“整体消失åQŒéƒ¨åˆ†ä¹Ÿž®±éšä¹‹æ¶ˆå¤±ã€‚比如张三的ç”?sh¨´)脑被偷了,那么电(sh¨´)脑的所有组件也不存在了åQŒé™¤éžå¼ ä¸‰äº‹å…ˆæŠŠä¸€äº›ç”µ(sh¨´)è„‘çš„¾l„äšgåQˆæ¯”如硬盘和内存åQ‰æ‹†äº†ä¸‹æ¥ã€?br />[UML图](å›?.4)

å›?.3 ç”?sh¨´)脑和组件的聚合关ç³?/font>

[代码表现]
  1. public class Computer{   
  2.     private CPU cpu;   
  3.     public CPU getCPU(){   
  4.         return cpu;   
  5.     }   
  6.     public void setCPU(CPU cpu){   
  7.         this.cpu=cpu;   
  8.     }   
  9.     //开启电(sh¨´)è„?  
  10.     public void start(){   
  11.         //cpu˜qä½œ   
  12.         cpu.run();   
  13.     }   
  14. }  



涤生 2007-01-17 10:07 发表评论
]]>
ibaitsçš„JPetStore中持久层的研½I¶ã€äº‹åŠ¡çš„å¤„ç†http://www.aygfsteel.com/mintqzy/archive/2007/01/16/94303.html涤生涤生Tue, 16 Jan 2007 13:15:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/16/94303.htmlhttp://www.aygfsteel.com/mintqzy/comments/94303.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/16/94303.html#Feedback2http://www.aygfsteel.com/mintqzy/comments/commentRss/94303.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/94303.htmliBatis DAO入门与进é˜Óž¼ˆhttp://www.matrix.org.cn/resource/article/44/44058_iBatis+DAO.htmlåQ?
iBatis DAO事务探烦åQˆhttp://www.aygfsteel.com/RongHao/archive/2006/01/20/28817.htmlåQ?

今天¾l§ç®‹ç ”究了JPetStore的持久层åQŒå…¶ä¸­ç”±äºŽçœ‹äº†ä¸€½‹‡æ–‡ç« çš„误导åQŒå¯¼è‡´æˆ‘对其中的事务处理æ·Þp¡¨æ€€ç–‘。通过阅读源代码与看上面两½‹‡æ–‡ç« ï¼Œå¯¹è¿™ä¸ªé—®é¢˜æ‰è®¤è¯†æ¸…楚。和我当初预想的一致ã€?
  é˜…读全文

]]>
ibatis JshopStore5çš„sqlmapçš„xml错误åQŒNestedSQLException错误http://www.aygfsteel.com/mintqzy/archive/2007/01/16/94203.html涤生涤生Tue, 16 Jan 2007 05:38:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/16/94203.htmlhttp://www.aygfsteel.com/mintqzy/comments/94203.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/16/94203.html#Feedback6http://www.aygfsteel.com/mintqzy/comments/commentRss/94203.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/94203.html查阅了ibatis帮助åQŒæ­¤å¤„sql_map的嵌套类写法是正¼‹®çš„。我又将˜q™ä¸ªsql语句拯‚´åˆ°MsSqlServer中执行,¾l“果也是正确的。陷入困惑ã€?
  é˜…读全文

]]>
Struts链接中的参数http://www.aygfsteel.com/mintqzy/archive/2007/01/15/94035.html涤生涤生Mon, 15 Jan 2007 12:56:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/15/94035.htmlhttp://www.aygfsteel.com/mintqzy/comments/94035.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/15/94035.html#Feedback0http://www.aygfsteel.com/mintqzy/comments/commentRss/94035.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/94035.html我是从Net阵营中刚转入Java里的åQŒåœ¨Net中对è¯äh±‚参数的名¿U°æ— ç‰ÒŽ(gu¨©)®Šé™åˆ¶åQŒåªè¦åœ¨™åµé¢ä¸­å–参数的值即可。当然这个功能在Java中也具备。即request.Getparameter()

今天我在看JpetStore代码æ—Óž¼Œåœ¨ç‚¹å‡?br />http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?categoryId=BIRDS
æ—Óž¼Œå½“è·Ÿítªå‡½æ•°viewCategory时发现此时categoryID已经赋å€égº†åQŒæˆ‘却找不到在什么地方赋值的åQŒå¥½æ˜¯èŠ±è´¹äº†ä¸€ç•ªå‘¨æ‰§ã€?br />查看此段链接对应的struts.xml

    
<action path="/shop/viewCategory" type="org.apache.struts.beanaction.BeanAction"
            name
="catalogBean" scope="session"
            validate
="false">
      
<forward name="success" path="/catalog/Category.jsp"/>
我首先跟ítªBeanActionçš„excute函数发现在此之前ž®±å·²¾lèµ‹å€û|¼Œè¯´æ˜Žå’ŒBeanActionæ— å…³åQŒæ˜¯Struts¾pȝ»Ÿæœ¬èín的结构。我故意ž®†é“¾æŽ¥ä¿®æ”¹ï¼Œä¿®æ”¹æˆ?br />http://127.0.0.1:8083/JPetStore/shop/viewCategory.shtml?category=BIRDS
此时出现错误åQŒé”™è¯¯å¦‚下:
java.lang.IllegalArgumentException: Cannot invoke com.ibatis.jpetstore.presentation.CatalogBean.setCategory - argument type mismatch
    org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:
1778)
    org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:
1759)
    org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:
1648)
    org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:
1677)
    org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:
1022)
    org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:
811)
    org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:
298)
    org.apache.struts.util.RequestUtils.populate(RequestUtils.java:
493)
    org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:
805)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
203)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1194)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
414)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:
689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:
802)
æ ÒŽ(gu¨©)®˜q™ä¸ªé”™è¯¯å †æ ˆå¯çŸ¥åQŒå®ƒå®žé™…上采用的是反ž®„,setPropertyåQŒæ­¤æ—¶æ‰¾ä¸åˆ°categoryçš„Setter函数报错。然后我查看了一下RequestProcessor的默认实çŽîC»£ç ?
// Process any ActionForm bean related to this request
ActionForm form = processActionForm(request, response, mapping);
processPopulate(request, response, form, mapping);
˜q™æ®µå‡½æ•°åŠŸèƒ½ä¸ºï¼š
1åQ‰è°ƒç”¨processActionForm( )æ–ÒŽ(gu¨©)³•‹‚€æŸ¥æ˜¯å¦å­˜åœ¨äØ“ActionMapping配置的ActionForm 。如果存在,则在有效åŒ?br />域内查找是否存在该ActionForm 的实例,存在åQŒåˆ™å¤ç”¨åQŒä¸å­˜åœ¨åQŒåˆ™åˆ›å¾ä¸€ä¸ªå®žä¾‹ã€‚然后将实例保存与再配置
æ–‡äšg中配¾|®å¥½çš„æœ‰æ•ˆåŒºåŸ?request,session,application)内,òq¶ç”¨Action元素的nameå±žæ€§ä½œä¸ø™¯¥å®žä¾‹çš„关键字ã€?br />2åQ‰è°ƒç”¨processPopulate( )æ–ÒŽ(gu¨©)³•åQŒå¦‚æžœå­˜æ¥å­˜åœ¨äØ“ActionMapping配置的ActionFormåQŒåˆ™ž®è£…è¯äh±‚对象中的数据
到ActionForm 中,在进行封装之前,先调用ActionForm çš„reset( )æ–ÒŽ(gu¨©)³•˜q›è¡Œå±žæ€§å€¼çš„默认化ã€?br />
æ ÒŽ(gu¨©)®ä»¥ä¸Šçš„分析,可得知,在调用链接前struts框架会自动的ž®†æ‰€æœ‰çš„è¯äh±‚参数ž®è£…入指定的formbean中。所以请求参数的名称应该是对应formbean的一个属性ã€?br />
˜q™å°±æ˜¯struts中请求参数的处理˜q‡ç¨‹ã€‚主要是我对struts˜q˜æ²¡æœ‰å®Œå…¨æŽŒæ¡ï¼ŒåŠ ä¸ŠNet的媄响,才花费了一圈发现这个原因ã€?br />

]]>
iBatisçš„JpetStore½CÞZ¾‹ä¸­MVC机制实现的研½IÓž¼ŒBeanActionåQŒBaseBeanhttp://www.aygfsteel.com/mintqzy/archive/2007/01/12/93479.html涤生涤生Fri, 12 Jan 2007 08:34:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/12/93479.htmlhttp://www.aygfsteel.com/mintqzy/comments/93479.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/12/93479.html#Feedback8http://www.aygfsteel.com/mintqzy/comments/commentRss/93479.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/93479.htmlJpetStore中的Action与普通Strutsçš„Action处理方式不一栗÷€‚遍历JpetStoreçš„srcæ–‡äšg夹,òq¶æ— ä¸€ä¸ªå…·ä½“çš„ActionåQŒé‚£ä¹ˆå®ƒæ˜¯å¦‚何来完成普通Strutsçš„Action工作了?
查看JpetStoreçš„Struts.xml可以发现åQŒå®ƒçš„Action只有一个,即“org.apache.stuts.beanaction.Beanaction”。通过Eclipse查看beanaction.jar的源代码åQŒå¯ä»¥å‘现Beanaction¾l§æ‰¿ä¸Žæ™®é€šActionåQŒå³å…·å¤‡æ™®é€šçš„action的功能。那么它无具体Action的奥妙在哪,¾l§ç®‹ç ”ç©¶BeanAction的代码,截取BeanActionçš„excuteæ–ÒŽ(gu¨©)³•中核心部分代码如下: 
/*遍历此方法的业务逻辑可知åQ?的优先çñ”最高,如果æ˜?åQŒåˆ™ä¸è°ƒç”¨ä“Q何方法直接ForwardåQŒç±»ä¼égºŽForwardAction*/ 
private static final String NO_METHOD_CALL = "*"; 
…� 
/*所有的FormBean都ç‘ô承于BaseBean*/ 
BaseBean bean 
= (BaseBean) form; 
      ActionContext.initCurrentContext(request, response); 
      
if (bean != null) { 
        
// Explicit Method Mapping 
/*下面是检查struts.xml配置中是否有parameter属�/span>*/ 
        Method method 
= null; 
        String methodName 
= mapping.getParameter(); 
        
if (methodName != null && !NO_METHOD_CALL.equals(methodName)) { 
          
try { 
/*通过反射åQŒæ ¹æ®å¾—到的æ–ÒŽ(gu¨©)³•名称取得æ–ÒŽ(gu¨©)³•的句æŸ?/span>*/ 
            method 
= bean.getClass().getMethod(methodName, null); 
            
synchronized (bean) { 
/*下面是关键一句,调用basebean拥有的接口ActionInterceptor的实现DefaultActionInterceptoråQŒæ¥å®Œæˆå…·ä½“æ–ÒŽ(gu¨©)³•的调ç”?/span>*/ 
              forward 
= bean.getInterceptor().intercept(new ActionInvoker(bean, method)); 
            }
 
         …�. 
/*æ— Parameter属性,‹‚€æŸ¥path路径的最后一ä¸?后的名称åQŒå³ä¸ø™°ƒç”¨çš„æ–ÒŽ(gu¨©)³•å?/span>*/ 
        
// Path Based Method Mapping 
        if (method == null && !NO_METHOD_CALL.equals(methodName)) { 
          methodName 
= mapping.getPath(); 
          
if (methodName.length() > 1) { 
            
int slash = methodName.lastIndexOf("/") + 1; 
            methodName 
= methodName.substring(slash); 
            
if (methodName.length() > 0) { 
              
try { 
                method 
= bean.getClass().getMethod(methodName, null); 
                
synchronized (bean) { 
                  forward 
= bean.getInterceptor().intercept(new ActionInvoker(bean, method)); 
                }
 
             …�. 
/*æ ÒŽ(gu¨©)®è°ƒç”¨æ–ÒŽ(gu¨©)³•˜q”回的StringåQŒå¾—到页面的转移路径*/ 
return mapping.findForward(forward); 
 
通过研究上面˜q™æ®µä»£ç åQŒæˆ‘们可知,JpetStore中没有具体Action实现的关键原因即在于下面˜q™å‡ å?
/*通过反射åQŒæ ¹æ®å¾—到的æ–ÒŽ(gu¨©)³•名称取得æ–ÒŽ(gu¨©)³•的句æŸ?/span>*/ 
            method 
= bean.getClass().getMethod(methodName, null); 
            
synchronized (bean) { 
/*下面是关键一句,调用basebean拥有的接口ActionInterceptor的实现DefaultActionInterceptoråQŒæ¥å®Œæˆå…·ä½“æ–ÒŽ(gu¨©)³•的调ç”?/span>*/ 
              forward 
= bean.getInterceptor().intercept(new ActionInvoker(bean, method)); 
            }
 
卛_°†åŽŸæ¥Action中的excuteæ–ÒŽ(gu¨©)³•的实现è{¿UÕdˆ°FormBean中,˜q™æ ·å®žçŽ°æ˜‘Ö¾—æ›´äØ“½Ž€æøP¼Œæ–¹ä¾¿ã€‚ç ”½I¶ActionInvokeåQŒå®ƒçš„æ ¸å¿ƒä»£ç å¦‚下:
public String invoke() { 
    
try { 
      
return (String) method.invoke(bean, null); 
    }
 catch (Exception e) { 
      
throw new BeanActionException("Error invoking Action.  Cause: " + e, e); 
    }
 
  }
 
è‡Ïx­¤å¯çŸ¥åQŒå®ƒè°ƒç”¨çš„æ˜¯formbean中的函数。且从这ŒDµä»£ç å¯çŸ¥ï¼Œformbean的这¾cȝ‰¹ŒDŠå‡½æ•ŽÍ¼Œæ­¤å¤„¿UîCØ“actionæ–ÒŽ(gu¨©)³•åQŒè¦½W¦åˆä¸¤ä¸ªç‰¹å¾åQ?åQ‰æ— å‚æ•°åQ?åQ‰è¿”回å€égØ“stringåQŒæ­¤˜q”回stringåÏx˜¯Struts-config.xml的全局或局部的forwardã€?
以上是整个beanaction的实现机制。个人感觉此¿Uå®žçŽ°æ–¹æ³•å¯¹äºŽå¼€å‘è€…è€Œè¨€å·²ç»¾cÖM¼¼äºŽASP.NETçš?aspxä¸?cs开发模式了。下面是通过实例来说明一下BeanAction如何控制formbeançš?
 
Struts-config.xml的配¾|®é‡Œæœ?¿Uæ˜ ž®„方式,来告诉BeanAction把控制è{到哪个form bean对象的哪个方法来处理ã€?
åQ?åQ‰parameter=â€?’直接蟩转;åQ?åQ‰Parameter中含具体的方法名åQ›ï¼ˆ3åQ‰Path中最后一ä¸?后的æ–ÒŽ(gu¨©)³•å?
ä»¥è¿™ä¸ªè¯·æ±‚è¿žæŽ¥äØ“ä¾‹http://localhost/jpetstore4/shop/viewOrder.shtml
1. URL Pattern

   
<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
    name
="orderBean" scope="session"
    validate
="false">
    
<forward name="success" path="/order/ViewOrder.jsp"/>
  
</action>

 
此种方式表示åQŒæŽ§åˆ¶å°†è¢«è{发到"orderBean"˜q™ä¸ªform bean对象 çš?viewOrder"æ–ÒŽ(gu¨©)³•åQˆè¡Œä¸ºï¼‰æ¥å¤„理。方法名å?path"参数的以"/"分隔的最后一部分ã€?
2. Method Parameter 
<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
    name
="orderBean" parameter="viewOrder" scope="session"
    validate
="false">
    
<forward name="success" path="/order/ViewOrder.jsp"/>
  
</action>

 
此种方式表示åQŒæŽ§åˆ¶å°†è¢«è{发到"orderBean"˜q™ä¸ªform bean对象çš?viewOrder"æ–ÒŽ(gu¨©)³•åQˆè¡Œä¸ºï¼‰æ¥å¤„理。配¾|®ä¸­çš?parameter"参数表示form bean¾cÖM¸Šçš„æ–¹æ³•ã€?parameter"参数优先äº?path"参数ã€?
3. No Method call
 <action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
    name
="orderBean" parameter="*" scope="session"
    validate
="false">
    
<forward name="success" path="/order/ViewOrder.jsp"/>
  
</action>

此种方式表示åQŒform bean上没有ä“Q何方法被调用。如果存åœ?name"属性,则struts把表单参数等数据填充到form bean对象后,把控制è{发到"success"。否则,如果name为空åQŒåˆ™ç›´æŽ¥è½¬å‘控制åˆ?success"ã€?
˜q™å°±ç›¸å½“于struts内置的org.apache.struts.actions.ForwardAction的功èƒ?
<action path="/shop/viewOrder" type="org.apache.struts.actions.ForwardAction"
    parameter
="/order/ViewOrder.jsp " scope="session" validate="false">
 
</action>
 

 

]]>
如何在Eclipse中ä‹É用ibatis的自动代码生成工具Abatorhttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93268.html涤生涤生Thu, 11 Jan 2007 13:37:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93268.htmlhttp://www.aygfsteel.com/mintqzy/comments/93268.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93268.html#Feedback1http://www.aygfsteel.com/mintqzy/comments/commentRss/93268.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/93268.html
获得
      http://ibatis.apache.org/abator.html
     Eclipse可以自动的进行Update获取此PluginåQŒå®˜æ–¹çš„安装步骤

Automatic Eclipse Install

If you've already installed a prior version of Abator, simply run the Eclipse Install/Update tool and the new version will be found automatically.

If you've not already installed Abator, then you can use the built in Eclipse install support by following these steps:

  1. Take the "Help>Software Updates>Find and Install" Menu Option
  2. Select the "Search for new features to install" radio button, press "Next"
  3. Press the "New Remote Site" button
  4. Enter the following information:
    Name:
    Abator for Eclipse Update Site
    URL:
    http://ibatis.apache.org/tools/abator
  5. Press OK
  6. Check the box next to "Abator for Eclipse Update Site"
  7. Follow the remainder of the install wizard

2、安装好后将在New菜单中看åˆîC¸€ä¸ªæ–°çš„æ–‡ä»¶ç±»åž?font face="Courier New">Abator for iBATIS Configuration FileåQŒæ­¤æ˜¯Abator的配¾|®æ–‡ä»Óž¼Œé…ç½®æ–‡äšg的详¾l†è¯´æ˜Žè§http://ibatis.apache.org/docs/tools/abator/

3、新å»ÞZ¸€ä¸ªé…¾|®æ–‡ä»Óž¼Œ˜q›è¡Œä¿®æ”¹åQŒæ ¹æ®è‡ªå·Þqš„实际需求进行修æ”?br />关键点:
1åQ‰jdbcconnectionåQŒæŒ‰ç…§ä¸€èˆ¬çš„配置卛_¯åQŒéœ€è¦è¯´æ˜Žçš„æ˜¯å®ƒéœ€è¦æŒ‡å®šè®¿é—®JdbcDriverçš„classPathEntryåQŒå¯¹äºŽMsSqlServer而言åQŒè¦ž®†è¿™ä¸‰ä¸ªjaræ–‡äšg均包含在内,否则会出现jdbc讉K—®é”™è¯¯ã€?br />2åQ‰é…¾|®ä¸‰ä¸ªPakage
3åQ‰é…¾|®è¡¨åQŒæ­¤å¤„需说明的是对于MsSqlServer不能写TableSchemaåQŒæˆ‘初次指定TableSchemaåQŒç»“果未扑ֈ°å¯¹åº”的表
½Ž€å•的配置如下åQŒå¤æ‚的见配¾|®æ–‡ä»¶çš„详细说明。示例配¾|®æ–‡ä»¶å¦‚ä¸?br /><abatorConfiguration>
  <abatorContext>    <!-- TODO: Add Database Connection Information -->
    <jdbcConnection driverClass="com.microsoft.jdbc.sqlserver.SQLServerDriver"
        connectionURL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=whm;SelectMethod=cursor"
        userId="sa"
        password="sa">
      <classPathEntry location="C:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib/mssqlserver.jar" />
      <classPathEntry location="C:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib/msutil.jar" />
      <classPathEntry location="C:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib/msbase.jar" />
    </jdbcConnection>

    <javaModelGenerator targetPackage="com.dwerp.itatis.domain" targetProject="BhbManage" />
    <sqlMapGenerator targetPackage="com.dwerp.itatis.persistence.xml" targetProject="BhbManage" />
    <daoGenerator type="IBATIS" targetPackage="com.dwerp.itatis.persistence.sqlmapdao" targetProject="BhbManage" />

    <table tableName="BHBGL">
    
    </table>

  </abatorContext>
</abatorConfiguration>

4、右键单击配¾|®æ–‡ä»Óž¼Œç‚¹å‡»Generate iBatis ArtifactsåQŒç”Ÿæˆæ–‡ä»¶ã€?/font>

 



涤生 2007-01-11 21:37 发表评论
]]>如何在Eclipse中运行ibatis的JpetStorehttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93263.html涤生涤生Thu, 11 Jan 2007 13:22:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93263.htmlhttp://www.aygfsteel.com/mintqzy/comments/93263.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93263.html#Feedback4http://www.aygfsteel.com/mintqzy/comments/commentRss/93263.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/93263.html
1、下载iBAITS(http://ibatis.apache.org/javadownloads.cgi)
2、下载JPetStore-5.0(http://ibatis.apache.org/javadownloads.cgi)

准备工作完成åQŒä¸‹é¢å¼€å§‹å°†½CÞZ¾‹½E‹åºè½¬ç§»åˆ°Eclipseä¸?br />1、在Eclipse中新å»ÞZ¸€ä¸ªç©ºçš„WebProjectåQŒå¦‚åQšJPetStore
2、将下蝲的JPetStore-5.0æ–‡äšg夹的内容拯‚´è‡³JPetStoreåQŒå…¶ä¸­ç”±äºŽEclipse默认的Webæ–‡äšgå¤ÒŽ(gu¨©)˜¯WebRoot所以JPetStore-5.0中的Webæ–‡äšg单独拯‚´åˆ°æ–°å»ºçš„Projectçš„Webæ–‡äšg夹WebRoot下。简单的是说åQŒå°±æ˜¯è¦ä¿è¯½Iºçš„WebProject中的所拥有文äšg模型不动åQŒå°†ä¸‹è²çš„内å®ÒŽ(gu¨©)‹·è´åˆ°ç›¸åº”的文件夹ä¸?br />3、刷新EclipseåQŒæ­¤æ—¶ä¼šçœ‹åˆ°src下显½CÞZؓ错误åQŒé”™è¯¯çš„原因是此时对应的包未引入åQŒç”±äºŽEclipse默认的是WebRoot/lib下的包文ä»Óž¼Œæ‰€ä»¥å°†ä¸È›®å½•下即JPetStore/devlib与JPetStore/lib引入到项目中
有两¿Uæ–¹æ³•:直接ž®†æ­¤ä¸¤ä¸ªæ–‡äšg夹下的内容直接拷贝到JPetStore/WebRoot/lib下,或者,通过Import命ä×o引入
4、至此就已经完成™å¹ç›®˜qç§»å·¥ä½œåQŒä¸‹é¢å°±æ˜?br />1åQ‰å¾æ•°æ®åº“,鄙äh用的是MsSqlServeråQŒåœ¨JPetStore/src/ddl中有各种数据库的sqlæ–‡äšg
2åQ‰ä¿®æ”¹iBATISçš„database.propertisåQŒè§ä¸Šç¯‡æ‹™ä½œ
3åQ‰åœ¨Eclipse通过Tomcat部çÖv
卛_¯çœ‹åˆ°PetShop的网站了
http://127.0.0.1:8083/JPetStore

希望对和我一æ ïLš„初学者有所帮助

]]>
如何在Eclipse中运行ibatis讉K—®MsSqlServerhttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93257.html涤生涤生Thu, 11 Jan 2007 13:01:00 GMThttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93257.htmlhttp://www.aygfsteel.com/mintqzy/comments/93257.htmlhttp://www.aygfsteel.com/mintqzy/archive/2007/01/11/93257.html#Feedback1http://www.aygfsteel.com/mintqzy/comments/commentRss/93257.htmlhttp://www.aygfsteel.com/mintqzy/services/trackbacks/93257.html希望此文能对初次使用ibatis讉K—®MsSqlserver的朋友è“v个借鉴

1、在http://ibatis.apache.org/javadownloads.cgi下蝲ibatisåQŒæˆ‘下蝲的是2.2.0åQŒç”±äºŽè¿˜æ²¡æœ‰çœ‹SpringåQŒæ‰€ä»¥ä¸‹è½½æ­¤ç‰ˆæœ¬åQŒå¸¦ iBATIS DAO 框架。以后版本都不再含有此框架。见¾|‘站说明åQ?br />Note: iBATIS 2.2.0 is the last release that includes the iBATIS DAO framework. After 2.2.0, the DAO iBATIS framework is removed from the downloads. We suggest converting iBATIS framework DAOs to the Spring Framework.
2、下载后ž®†libæ–‡äšg夹下的三个jaræ–‡äšg加入机器的Classpathä¸?br />此时åQŒiBATIS 的框架已¾læ­å»ºå¥½

下面介绍一下如何访问MsSqlServerã€?br />1、机器已¾lä¸‹è½½äº†Jdbc for MSsqlServerçš„jaræ–‡äšgåQŒå…±ä¸‰ä¸ªæ–‡äšgåQŒå¾®è½¯ç½‘站有下蝲ã€?br />2、可以通过Eclipse自带的DataBase Explorer‹¹‹è¯•是否能访问MsSqlServer

此时åQŒé€šè¿‡iBATIS讉K—®MsSqlServer的前期条件均已经准备好,下面˜q›è¡Œé…ç½®
1、配¾|®sql-map-config.xmlæ–‡äšgåQŒæ ¸å¿ƒéƒ¨åˆ†å¦‚ä¸?br /><sqlMapConfig>

  <properties resource="com/zyque/struts/database.properties"/>

  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <property value="${driver}" name="JDBC.Driver"/>
      <property value="${url}" name="JDBC.ConnectionURL"/>
      <property value="${username}" name="JDBC.Username"/>
      <property value="${password}" name="JDBC.Password"/>
      <property name="JDBC.DefaultAutoCommit" value="true" />
    </dataSource>
  </transactionManager>

  <sqlMap resource="com/zyque/ibatis/BhbGl.xml"/>
 
</sqlMapConfig>

2、从上可以看出数据库è¯Õd–的是database.propertiesåQŒæ­¤é…ç½®å¦‚下
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=whm;SelectMethod=cursor
username=sa
password=sa
此处注意的是在访问MsSqlServer时候,需ž®†SelectMethod=cursoråQŒåŽŸå› è§ä¸Šç¯‡åšå®¢

通过˜q™ä¸¤æ­¥å°±å¯ä»¥é€šè¿‡ibatis讉K—®MsSqlServeräº?br />讉K—®½CÞZ¾‹ä»£ç åQˆå‚考的ibatis的入门指南,ibatis官方¾|‘站有下载)åQŒæ­¤å¤„未对代码进行功能隔¼›Õd°è£…,便于向嬖äºÞZ¹‹‹¹çš„初学者学ä¹?br />Bhbm elm = null;
String p_mc = "FM_BHJLDW";

String resource = "com/zyque/ibatis/sql-map-config.xml";
 Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);


elm = (Bhbm) sqlMap.queryForObject ("getBhbByName", p_mc);

ä¸Šé¢æ¼”ç¤ºçš„ä¸€ä¸ªç®€å•æŸ¥è¯¢ï¼Œå…¶ä½™çš„ç¤ºä¾‹å¯ä»¥çœ‹å…¥é—¨æŒ‡å—ã€‚åÆˆéžæœ¬æ–‡çš„é‡ç‚¹ã€?br />
     



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ½¨Æ½ÏØ| ÎÂËÞÏØ| Èç¸ÞÊÐ| ÏóÉ½ÏØ| ½¨ê±ÊÐ| Ñô³ÇÏØ| ·ðɽÊÐ| ½ðºþÏØ| ÑÓ³¤ÏØ| ÓÑÒêÏØ| ½ºÓÏØ| ÕòÐÛÏØ| ·¿É½Çø| ÔªÀÊÇø| ¶ëɽ| ɳÍåÏØ| ÄÏͶÊÐ| ÉñÄ¾ÏØ| ÑγØÏØ| À×É½ÏØ| ´óÒØÏØ| ×Ͳ©ÊÐ| Æ½Ì¶ÏØ| ½­ÒõÊÐ| º£ÐËÏØ| ¸»ÄþÏØ| »´±õÏØ| ¶õÍпËǰÆì| ´óÍÝÏØ| ´ëÇÚÏØ| ÎÞÎýÊÐ| ËìÄþÊÐ| ƽÒõÏØ| ºôºÍºÆÌØÊÐ| ½¡¿µ| ÇìÔªÏØ| Üþ¾­ÏØ| Ðû»¯ÏØ| »´±±ÊÐ| л¯ÏØ| ±ß°ÓÏØ|