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

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

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

    張昊

    J-Hi(http://www.j-hi.net)

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      45 Posts :: 1 Stories :: 110 Comments :: 0 Trackbacks

           J-Hi設計自己的查詢過濾器而沒有直接采用HibernateCriteria,是出于以下兩個原因:

    1HibernateCriteria的功能是很強大,但在使用上還是比較繁瑣。因此J-Hi想從用戶使用的簡單易用性上考慮設計一款查詢過濾器。

    2J-Hi是一款跨ORM的多框架平臺,不能拘泥一種只在Hibernate適用的產品。因此從設計角度考慮,J-Hi對于查詢過濾功能必須要有一個中間層,從而使適應多ORM框架成為可能。

           下面讓我們來分析一下對于SQL的查詢具體應該考慮些什么

    1、                                          1、字段名            數據庫表的字段名

    2、                                          2、操作符            比如大于、小于……。還會包括一些特殊的操作符如likein

    3、                                          3、NO                 NO操作符是對操作符的補充,只有inlik也會有no

    4、                                          4、值                   對應字段類型的具體值,如字符串就要加引號,日期就要做轉換

    5、                                          5、空值               空值是特殊值,表述形式如IS NULLIS NOT NULL

    6、                                          6、關系符            兩個查詢條件之間的關系包括三種 AND OR NOT

    7、                                          7、優前級            通過左右括號來控制查詢條件的優前級

    8、                                          8、通配符            如果是like操作符,在值的左側或是右側或兩側都可以通過%來控制值的匹配條件

    對于java來說,無非就是考慮如何將上述的描述通過對象化的方式實現

    先讓我們用例說明:

           Filter filter = FilterFactory.getSimpleFilter("name", "馬超");

    首先所有的過濾器都必須由FilterFactory(過濾器工廠)創建,參數依次為

    namePOJO的屬性名的字符串,可以通過.級聯如(org.id);

    value:待過濾的過濾值

    oprtion:操作符,提供多種操作符,具體參見javadoc

    relation:關系符,兩個過濾器之間的關系,如AND / OR / NOT


    過濾器可以通過addCondition方法累加過濾條件,例如:

    filter.addCondition("name", "趙云", Filter.OPERATOR_EQ,Filter.RELATION_OR);

    調用addCondtion()方法返回是條件累加后的Filter,因此你可以一直不斷的調用addCondtion()方法,而不用每做一個過濾條件就創建一個新的Flter


    也可以通過addFilter方法將兩個過濾器連接合并在一起

           otherFilter.addFilter(filter, Filter.RELATION_AND);

    因為一個過濾器會有多個查詢條件,因此在通過addFilter()將兩上過濾器進行合并時會對這兩個過濾器自動加左右括號。對應sql為:

    (otherFilter的查詢條件) and (name like ‘%馬超%’ or name = ‘趙云’ )


           addFilter對應,J-Hi還提供了removeFilter的功能,目的是通過目標過濾器中刪除曾經加進來的子過濾器

                  otherFilter.remove(filter);

           對字符串的操作,如果不加操作符那么系統默認采用like操作符,并且左右兩側均會加通配符,為了解決通配符的問題,J-Hi提供了

    Filter likeFilter = FilterFactory.getLikeFilter("name", "馬超", Filter.RELATION_AND, LikeFilter. LIKE_CONTROLER_LEFT );

    對應的SQL語名為:name like ‘%馬超


           如果對null或非null做過濾

         FilterFactory.getSimpleFilter(propertyName, null, Filter.OPERATOR_EQ);

    FilterFactory.getSimpleFilter(propertyName, null, Filter.OPERATOR_NOT_EQ);

    對應的SQL語句分別為:propertyName IS NULL ; propertyName IS NOT NULL


    如果做包含(IN)做過濾

    FilterFactory.getInFilter(propertyName, coll);

    其中colljava.util.Collection接口的對象


    除此以外,J-Hi還提供了排序器

    Sorter sorter = SorterFactory.getSimpleSort(propertyName, Sorter.ORDER_DESC);

    Sorter.addSort(properyName1, Sorter.ORDER_ASC);

    首先所有的排序器都必須由SorterFactory(過濾器工廠)創建,排序器可以通過addSort方法累加。也可以通過addSort方法將兩個排序器連接合并在一起


    具體的調用方法例如:

    HiUserManager userMgr = (HiUserManager)SpringContextHolder.getBean(HiUser.class);

    userMger.getObjects(filter,sorter);

    總結:J-Hi的查詢過濾器并沒有象HibernateCriteria那么的強大,還不支持外連接與聚合。原因是這種大數據量的統計對ORM框架來實現在效率上并不是好的解決方案,再者實現上述功能增加了使用者操作的復雜度。薦于以上兩個原因J-Hi的查詢過濾器沒有實現上述功能。

    posted on 2011-03-13 19:23 張昊 閱讀(1629) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 我们的2018在线观看免费高清| 伊人亚洲综合青草青草久热| 99久久国产亚洲综合精品| 亚洲国产精品成人| 久久免费福利视频| 国产99久久久久久免费看| 久久精品国产亚洲一区二区| 国产大片线上免费观看| 99精品视频免费| 人体大胆做受免费视频| 亚洲欧美自偷自拍另类视| 亚洲欧洲日产国码无码网站| 日本a级片免费看| 中文字幕成人免费视频| 华人在线精品免费观看| 免费福利资源站在线视频| 亚洲日本成本人观看| 亚洲人成网国产最新在线| 亚洲日韩国产精品无码av| 久久精品国产亚洲av成人| 久久久久亚洲av无码尤物| 国产午夜亚洲精品理论片不卡 | 亚洲日本乱码在线观看| 亚洲人成电影网站国产精品| 免费播放春色aⅴ视频| 亚洲高清视频一视频二视频三| 国产精品无码素人福利免费 | 亚洲制服丝袜一区二区三区| 久久久久亚洲精品无码蜜桃 | 欧美最猛性xxxxx免费| 欧洲黑大粗无码免费| 在线观看亚洲免费| 亚洲第一黄色网址| 亚洲欧洲一区二区| 亚洲一区二区三区免费观看| 亚洲大尺度无码无码专线一区| 国产精品手机在线亚洲| AAA日本高清在线播放免费观看| 84pao强力永久免费高清| 性xxxx视频播放免费| 久久亚洲国产午夜精品理论片|