<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    在數據庫的設計中,字典項是經常使用的技巧。
    比如在一個圖書館系統中,書籍表(Book)會有一個分類字段,這時候我們一般會單獨建立一張分類表(Category),在書籍表只保存分類表的ID。
    在用戶界面上顯示書籍明細的時候,會要求顯示CategoryID在Category表中對應的名稱。
    這樣通常的做法是把Book和Category兩張表進行關聯。
    但在實際應用中,Category一般都是Cache在應用服務器端,再使用數據表的連接就不夠高效。
    我的做法是這樣的:在iBatis中使用SqlMap從表中將數據取出,此時不使用數據表的連接。
    package com.demo;
    public class Book {
          
    /* 省略了getter和setter方法 */
            private int id;
            
    private String name;
            
    private int categoryId;
            
    private String author;
    }


    package com.demo;

    public class Category {
           
    private static Map<Integer, Category> cacheMap;

            
    /* 省略了這兩個屬性的getter和setter方法 */

            
    private int id;
            
    private String name;
           
    public static Category getCategory(int id) {
                 init();
                
    return cacheMap.get(id);
            }
     
            
    public static Map<Integer, Category> getCategoryMap() {
                init();
               
    return cacheMap();
            }

           
    private init() {
                
    if ( cacheMap != null ) return;

                
    // the code to load category from datebase
                
    // 在這里為了演示的需要,使用以下代碼

                 cacheMap 
    = new HashMap<Integer, Category>();
                 Category category 
    = new Category();
                 category.setId(
    1);
                 category.setName(
    "Fiction");
                 cacheMap.put(
    1, category);
     
                 category 
    = new Category();
                 category.setId(
    2);
                 category.setName(
    "Cartoon");
            }
    }



    package com.demo;

    public class BookAction  {
            
    /* 省略了屬性的getter和setter方法 */
            Book book;

            
    public String execute() {
                    book 
    = new Book();
                    book.setId(
    1);
                    book.setName(
    "Thinking in java");
                    book.setCategoryId(
    1);
                    bookList.add(book);
                    
                    
    return SUCCESS;                
            }
    }

    JSP:
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
     
    <head>
      
    <s:head />
     
    </head>

     
    <body>

      
    <table border="1">
        
    <tr>
         
    <td>
          
    <s:text name="page.label.userName" />
         
    </td>
         
    <td>
          
    <s:property value="book.name" />
         
    </td>
        
    </tr>
        
    <tr>
         
    <td>
          
    <s:text name="page.label.category" />
         
    </td>
         
    <td>
           
    <s:property value="@com.demo.Category@getCategory(book.categoryId).getName()"/></td>
        
    </tr>
     
    </body>
    </html>






    評論

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-17 17:57 by 雨奏
    @云自無心水自閑

    其實如果修改一下Book為

    public class Book {
    /* 省略了getter和setter方法 */
    private int id;
    private String name;
    private Category category; //Modify code here
    private String author;
    }

    (當然你的action、dao等需要進行相應的修改)

    可以考慮在JSP頁面中這樣訪問:

    <s:property value="book.category.name"/>

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值[未登錄]  回復  更多評論   

    2008-03-17 19:00 by 云自無心水自閑
    @雨奏
    這篇文章主要就是想利用數據的緩存簡化數據存取。
    Category這樣的緩存方法只是一個示例,其實數據完全可以以其他的方式緩存,這里只是介紹有這么一種方法可以使用。

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-17 21:06 by 長江三峽
    學習

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-18 00:12 by Edward's
    ognl原來可以這樣用啊

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-18 09:37 by 雨奏
    @云自無心水自閑
    沒錯,數據緩存方式有多種,你的文章也確實展現了ognl的更多的用法。我只是提出一點個人的看法供參考:就你提供的代碼來看,感覺換一種方式似乎更簡潔、更易理解一點

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-18 09:59 by hejianhuacn
    webwork2 里也支持“@com.demo.Category@getCategory(book.categoryId).getName()"的語法?看來要試一下了

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-18 20:55 by 云自無心水自閑
    @雨奏
    想請教一下,你準備如何修改action和Dao? 
    即如何獲得book實例中category的值呢?

    # re: 使用struts2中的ognl表達式顯示數據表字典項的值  回復  更多評論   

    2008-03-18 21:53 by 雨奏
    @云自無心水自閑
    因為我使用的是Hibernate,當把Category作為Book的一個屬性,獲得一個Book實例后可直接訪問該屬性取得相應的Category,Hibernate會自動地加載它(如果設置了laze initialization,Hibernate會在程序第一次訪問該屬性時加載,否則加載Book時同時加載)
    我才注意到你使用的是iBatis,很抱歉我對它并不了解,我提到的這種做法可能并不適合
    主站蜘蛛池模板: 老司机午夜在线视频免费 | 亚洲中文字幕无码mv| 久久国产乱子伦精品免费看| 精品少妇人妻AV免费久久洗澡| 国产亚洲sss在线播放| 曰曰鲁夜夜免费播放视频| 亚洲AV成人噜噜无码网站| 日本阿v免费费视频完整版| 亚洲无线一二三四区| 丁香花免费高清视频完整版| 亚洲色成人WWW永久在线观看| 在线观看成人免费视频| 午夜亚洲国产精品福利| 亚洲精品99久久久久中文字幕| 色吊丝性永久免费看码 | 亚洲AV无码成人网站久久精品大 | 99热这里只有精品6免费| 亚洲av日韩av天堂影片精品| 中文字幕在线免费| 亚洲一区精彩视频| 国产一级高清视频免费看| 思思久久99热免费精品6| 国产精品亚洲天堂| 亚洲线精品一区二区三区影音先锋| 国产精品小视频免费无限app| 亚洲日本中文字幕| 大学生一级特黄的免费大片视频| 免费国产黄网站在线看| 亚洲第一中文字幕| 免费a级毛片高清视频不卡| 免费人成视频在线播放| 亚洲AV无码乱码在线观看富二代| 五月婷婷综合免费| 一级毛片正片免费视频手机看| 久久精品夜色国产亚洲av| 成人AV免费网址在线观看| 一级a性色生活片久久无少妇一级婬片免费放| 久久亚洲高清观看| 日韩电影免费在线观看视频| a级毛片在线免费观看| 亚洲一区二区三区高清在线观看|