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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    Ibatis在項目開發中,無論是企業管理還是電子商務,Productivity作用都非常的大,淋漓盡致的體現了模板的好處,將sql的繁雜的語法和查詢條件參數數據清晰的剝離出來,無論是開發速度和代碼的易維護性上,都是無可比擬的。

      但是其中有一個重大的缺陷就是數據庫分頁查詢了,這個就不用多說了,參見 由ibatis引起的框架設計思考

      喜歡Hibernate的人,可以先去看:Ibatis VS Hibernate,  我也喜歡Hibernate,但重要的是要解決項目問題,而不是無休無止的爭論!

      不知道為什么,Ibatis對此無動于衷,反而采取了回避的態度,只是將分頁的方法depreciated,草草了事。

      我對于ibatis的源碼進行了改造,起名為XIbatis, 改造主要從一下幾個方面入手:
          
      1.提供與具體數據庫相關的分頁回調接口,調用者可以注入自己的分頁實現,并注入到Ibatis中,在分頁時進行回調。
            

     1 public   interface  Paginator  {
     2      /**
     3      * 根據原始的sql和pageNo, pageSize生成分頁的sql.
     4      *  @param  sql
     5      *  @param  pageNo  當前頁號
     6      *  @param  pageSize  每頁的數據條數
     7      *  @return  分頁sql
                     @author  http://www.tkk7.com/oneeyewolf

     8       */

     9      public  String getPaginatedSql(String sql,  int  pageNo,  int  pageSize);
    10     
    11 }

          XIbatis代碼內內置了Oracle 和 MySql分頁的兩種實現:


    2.與spring進行了集成,可以靈活的注入不同數據庫的分頁實現


      3 .由于在原有的接口中,新增了分頁查詢的方法,所以需要擴展spring 對ibatis的SqlMapClientTemplate的封裝。
          同時XIbatis向后兼容,保留了Ibatis的原來的所有方法。

         

    4.在ibatis的接口中增加了新的分頁的方法, :
           

     1   /**
     2    * 分頁查詢
     3    *  @param  id  The name of the statement to execute.
     4    *  @param  parameterObject  查詢條件對象
     5    *  @param  pageNo  當前頁號
     6    *  @param  pageSize  每頁顯示的數據條數
     7    *  @return
     8    *  @throws  SQLException
              * @author  http://www.tkk7.com/oneeyewolf
     9     */

    10   PageResult queryForPageResult(String id, Object parameterObject,  int  pageNo,  int  pageSize)  throws  SQLException;
    11


    5.最后的IbatisDao的實現:

     1 public   class  DAOIbatisImpl  extends  CustomIbatisDaoSupport  {
     2
     3      /**
     4      * 分頁查詢
     5      *  @param  id
     6      *  @param  params  查詢參數,里面必須要有一個pageNo的頁號參??
     7      *  @param  pageSize
     8      *  @return
     9       */

    10      public  PageResult queryByPagination(String id, Map params,  int  pageNo,  int  pageSize)  {
    11
    12          return  getSqlMapClientTemplate().queryForPageResult(id, params, pageNo, pageSize);
    13     }

    14     
    15      /**
    16      * 不分頁查詢
    17      *  @param  id  查詢ID
    18      *  @param  params  查詢參數
    19      *  @return
    20       */

    21      public  List queryForList(String id, Map params) {
    22          return   super .getSqlMapClientTemplate().queryForList(id, params);
    23     }

    24 }

    6.源代碼文件下載, 點擊這里>>
       包含:spring配置文件、example for Dao test、source code.
        
     7.RoadMap
        XIbatis未來將著手對于sql template語法進行改造,已能夠適應電子商務網站復雜、多樣查詢的要求。

        有改造需求的人,可以在這里提出來。

       
    20人合租600元/年

    posted on 2008-12-01 11:51 Speed 閱讀(1053) 評論(4)  編輯  收藏 所屬分類: 框架設計J2EEHibernate & Ibatis

    評論

    # re: XIbatis 發布-對ibatis的分頁查詢進行了擴展和功能增強 2008-12-01 16:09 charlie's logic

    good job.  回復  更多評論   

    # re: XIbatis 發布-對ibatis的分頁查詢進行了擴展和功能增強 2008-12-01 17:10 tp

    有前途,如果列中帶有函數就不建議這么搞了。  回復  更多評論   

    # re: XIbatis 發布-對ibatis的分頁查詢進行了擴展和功能增強 2008-12-02 14:06 stone2083

    想法是好的,做法是不可取的。
    任何對第三方組件的擴展,需要遵循開放-封閉原則:只能尋找組件的擴展點進行功能擴展,不允許直接修改源碼。

    試想一下,你修改了源代碼,以后如何解決與官方網站版本升級的同步問題?
    沒有團隊敢使用你的包。

    很早之間,我就有這個想法。但是發覺MappedStatement,SqlMapExecutorDelegate都是面向實現編程;
    并且SqlMapClient也是通過:
    public SqlMapConfiguration() {
    errorContext = new ErrorContext();
    delegate = new SqlMapExecutorDelegate();
    typeHandlerFactory = delegate.getTypeHandlerFactory();
    client = new SqlMapClientImpl(delegate);
    registerDefaultTypeAliases();
    }
    直接new出來的。
    所以,似乎找不到擴展的地方來實現“分頁”的需求。

    不知道大家是否有更好的方案,歡迎討論。  回復  更多評論   

    # re: XIbatis 發布-對ibatis的分頁查詢進行了擴展和功能增強 2008-12-02 15:23 Speed

    @stone2083
    good point, actually you need to balance the pros and cons for your own team. cause it is open source, so if it do not fully match your way, just modify the code to facilitate your application.   回復  更多評論  
    posted on 2008-12-08 12:00 禮物 閱讀(1088) 評論(0)  編輯  收藏 所屬分類: ibatis
    主站蜘蛛池模板: www.亚洲色图.com| 小说区亚洲自拍另类| 亚洲国产一区明星换脸| 久久久久久久免费视频| 99精品全国免费观看视频..| 蜜芽亚洲av无码一区二区三区| 亚洲视频一区二区三区| 亚洲人成网站在线观看播放| 国产精品免费小视频| 成人免费视频77777| 99精品在线免费观看| 成人无码精品1区2区3区免费看 | 免费污视频在线观看| 一日本道a高清免费播放| 亚洲成aⅴ人片久青草影院按摩| 亚洲福利电影一区二区?| 国产亚洲无线码一区二区| 亚洲成av人片在线观看天堂无码| 免费看片免费播放| 可以免费看黄视频的网站| 免费看男女下面日出水来| 一区二区三区四区免费视频 | 亚洲啪啪AV无码片| 亚洲AV无码乱码精品国产| 日本19禁啪啪无遮挡免费动图| 黄网站色在线视频免费观看| 59pao成国产成视频永久免费 | 亚洲av日韩av天堂影片精品| 亚洲小说区图片区另类春色| 在线观看亚洲精品国产| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 麻豆国产精品入口免费观看| 毛片免费观看视频| 97无码免费人妻超级碰碰碰碰| 在线v片免费观看视频| 无码日韩人妻av一区免费| 歪歪漫画在线观看官网免费阅读 | 亚洲国产精品免费观看| 中文字幕在线观看亚洲视频| 日韩亚洲人成在线| 亚洲av中文无码字幕色不卡|