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

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


    網站導航:
     
    主站蜘蛛池模板: 女人被免费视频网站| 中国人xxxxx69免费视频| 国产91免费在线观看| 亚洲人成网址在线观看| 伊人久久免费视频| 中文字幕亚洲综合久久| 2021在线永久免费视频| 亚洲视频免费在线看| 最近中文字幕无吗免费高清 | 亚洲国产精品综合福利专区| 国产真人无码作爱视频免费| 亚洲国产综合精品中文第一区| 四虎成人精品永久免费AV| 亚洲黄色在线网站| 妞干网免费视频在线观看| 精品国产日韩亚洲一区91| 中国亚洲女人69内射少妇| 黄页免费在线观看| 亚洲第一区视频在线观看| 18禁成年无码免费网站无遮挡| 亚洲国产精品无码中文lv| 亚洲精品国产福利一二区| 午夜理伦剧场免费| 亚洲日产乱码一二三区别| 亚洲国产一区明星换脸| 久久免费福利视频| 77777午夜亚洲| 亚洲精品线路一在线观看| 毛片无码免费无码播放| 亚洲av日韩综合一区二区三区| 久久亚洲欧洲国产综合| 亚洲人成免费电影| 无人视频在线观看免费播放影院| 亚洲国产精品无码久久久秋霞2| 69堂人成无码免费视频果冻传媒| 亚洲av成人中文无码专区| 国产亚洲日韩一区二区三区| 丁香花免费高清视频完整版| 一本久久免费视频| 亚洲国产精品xo在线观看| 亚洲国产成人精品91久久久|