<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,是出于以下兩個原因:

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

    2、J-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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 久久亚洲国产成人影院网站| 成年大片免费视频| 亚洲日本va午夜中文字幕久久| 亚洲JLZZJLZZ少妇| 大香人蕉免费视频75| 亚洲国产精品无码久久98| 午夜免费福利网站| 婷婷亚洲综合五月天小说在线| 国产成人一区二区三区免费视频| 色婷婷亚洲一区二区三区| 久久亚洲国产成人影院网站| 怡红院免费全部视频在线视频 | 精品国产免费观看一区| 亚洲精品精华液一区二区| 免费萌白酱国产一区二区| 日韩大片免费观看视频播放| 狠狠综合久久综合88亚洲| 国产无遮挡无码视频免费软件| 亚洲第一极品精品无码久久| 99在线观看精品免费99| 亚洲在成人网在线看| 在线不卡免费视频| 一级毛片a女人刺激视频免费| 亚洲精品无码专区在线在线播放 | 亚洲国产系列一区二区三区| 日产乱码一卡二卡三免费| 暖暖免费中文在线日本| 亚洲AV永久无码精品一百度影院| 亚洲电影在线免费观看| 在线亚洲高清揄拍自拍一品区| www亚洲精品少妇裸乳一区二区| 中文字幕免费在线播放| 亚洲国产精品综合福利专区| 国内大片在线免费看| 亚美影视免费在线观看| 亚洲欧洲精品视频在线观看| 国产三级免费观看| 精品国产麻豆免费人成网站| 亚洲综合一区无码精品| 国产亚洲精品看片在线观看| 无码国产精品一区二区免费虚拟VR|