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

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

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

    posts - 495,  comments - 11,  trackbacks - 0

    4.4 條 件 查 詢

    條件查詢是更具面向?qū)ο筇厣臄?shù)據(jù)查詢方式。條件查詢可通過如下3個(gè)類完成:

    ?? ● Criteria,代表一次查詢。

    ?? ● Criterion,代表一個(gè)查詢條件。

    ?? ● Restrictions,產(chǎn)生查詢條件的工具類。

    執(zhí)行條件查詢的步驟如下:

    (1)獲得Hibernate的Session對(duì)象。

    (2)以Session對(duì)象創(chuàng)建Criteria對(duì)象。

    (3)增加Criterion查詢條件。

    (4)執(zhí)行Criteria的list等方法返回結(jié)果集。

    看下面的條件查詢示例:

    private void test()

    {

    ??? //獲取Hibernate Session對(duì)象

    ??? Session session = HibernateUtil.currentSession();

    ??? //開始事務(wù)

    ??? Transaction tx = session.beginTransaction();

    ??? //創(chuàng)建Criteria和添加查詢條件同步完成

    ??? //最后調(diào)用list方法,返回查詢到的結(jié)果集

    ??? List l = session.createCriteria(Student.class)

    ??????? //此處增加限制條件必須是Student已經(jīng)存在的屬性

    ??? ??? .add( Restrictions.gt("studentNumber" , new Long(20050231) ) )

    ??????? //如果要增加對(duì)Student的關(guān)聯(lián)類的屬性的限制則必須重新createCriteria()

    ??????? /如果此關(guān)聯(lián)屬性是集合,則只要集合里任意一個(gè)對(duì)象的屬性滿足下面條件

    ??????? .createCriteria("enrolments")即可

    ??????? .add( Restrictions.gt("semester" , new Short("2") ) )

    ??????? .list();

    ??????? Iterator it = l.iterator();

    ??? //遍歷查詢到的記錄

    ??? while (it.hasNext())

    ??? {

    ??????? Student s = (Student)it.next();

    ??????? System.out.println(s.getName());

    ??????? Set enrolments = s.getEnrolments();

    ??????? Iterator iter = enrolments.iterator();

    ??????? while(iter.hasNext())

    ??????? {

    ??????????? Enrolment e = (Enrolment)iter.next();

    ??????????? System.out.println(e.getCourse().getName());

    ?????? }

    ??? }

    ??? tx.commit();

    ??? ibernateUtil.closeSession();

    }

    在條件查詢中,Criteria接口代表一次查詢,該查詢本身不具備任何的數(shù)據(jù)篩選功能,Session調(diào)用createCriteria(Class clazz)方法對(duì)某個(gè)持久化類創(chuàng)建條件查詢實(shí)例。

    Criteria包含如下兩個(gè)方法:

    ?? ● Criteria setFirstResult(int firstResult),設(shè)置查詢返回的第一行記錄。

    ?? ● Criteria setMaxResults(int maxResults),設(shè)置查詢返回的記錄數(shù)。

    這兩個(gè)方法與Query的這兩個(gè)方法用法相似,都用于完成查詢分頁。

    而Criteria還包含如下常用方法:

    ?? ● Criteria add(Criterion criterion),增加查詢條件。

    ?? ● Criteria addOrder(Order order),增加排序規(guī)則。

    ?? ● List list(),返回結(jié)果集。

    Criterion接口代表一個(gè)查詢條件,該查詢條件由Restrictions負(fù)責(zé)產(chǎn)生,Restrictions是專門用于產(chǎn)生查詢條件的工具類,它的方法大部分都是靜態(tài)方法,常用的方法如下:

    ?? ● static Criterion allEq(Map propertyNameValues),判斷指定屬性(由Map參數(shù)的key指定)和指定值(由Map參數(shù)的value指定)是否完全相等。

    ?? ● static Criterion between(String propertyName,Object lo, Object hi),判斷屬性值在某個(gè)值范圍之內(nèi)。

    ?? ● static Criterion ilike(String propertyName, Object value),判斷屬性值匹配某個(gè)字符串。

    ?? ● static Criterion ilike(String propertyName, String value,MatchMode matchMode),判斷屬性值匹配某個(gè)字符串,并確定匹配模式。

    ?? ● static Criterion in(String propertyName,Collection values),判斷屬性值在某個(gè)集合內(nèi)。

    ?? ● static Criterion in(String propertyName,Object[] values),判斷屬性值是數(shù)組元素的其中之一。

    ?? ● static Criterion isEmpty(String propertyName),判斷屬性值是否為空。

    ?? ● static Criterion isNotEmpty(String propertyName),判斷屬性值是否不為空。

    ?? ● static Criterion isNotNull(String propertyName),判斷屬性值是否為空。

    ?? ● static Criterion isNull(String propertyName),判斷屬性值是否不為空。

    ?? ● static Criterion not(Criterion expression),對(duì)Criterion求否。

    ?? ● static Criterion sizeEq(String propertyName, int size),判斷某個(gè)屬性的元素個(gè)數(shù)是否與size相等。

    ?? ● static Criterion sqlRestriction(String sql),直接使用SQL語句作為篩選條件。

    ?? ● static Criterion sqlRestriction(String sql, Object[] values, Type[] types),直接使用帶參數(shù)占位符的SQL語句作為條件,并指定多個(gè)參數(shù)值。

    ?? ● static Criterion sqlRestriction(String sql, Object value, Type type),直接使用帶參數(shù)占位符的SQL語句作為條件,并指定參數(shù)值。

    Order實(shí)例代表一個(gè)排序標(biāo)準(zhǔn),Order有如下構(gòu)造器:

    Order(String propertyName, boolean ascending),根據(jù)propertyName排序,是否采用升序,如果后一個(gè)參數(shù)為true,采用升序排序,否則采用降序排序。

    如果需要使用關(guān)聯(lián)類的屬性來增加查詢條件,則應(yīng)該對(duì)屬性再次使用createCriteria方法。看如下示例:

    session.createCriteria(Person.class)

    ??? .add(Restrictions.like("name" , "dd%"))

    ??? .createCriteria("addresses")

    ??? .add(Restrictions.like("addressdetail" , "上海%"))

    ??? .list();

    上面的代碼表示建立Person類的條件查詢,第一個(gè)查詢條件是直接過濾Person的屬性,即選出name屬性以dd開始的Person實(shí)例,第二個(gè)查詢條件則過濾Person關(guān)聯(lián)實(shí)例的屬性,其中addresses是Person類的關(guān)聯(lián)持久化類Address,而addressdetail則是Address類的屬性。值得注意的是,查詢并不是查詢Address持久化類,而是查詢Person持久化類。

    注意:使用關(guān)聯(lián)類的條件查詢,依然是查詢?cè)谐志没惖膶?shí)例,而不是查詢被關(guān)聯(lián)類的實(shí)例。

    posted on 2009-07-19 08:59 jadmin 閱讀(147) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 2022久久国产精品免费热麻豆| 成人国产网站v片免费观看| 精品免费视在线观看| 亚洲免费一区二区| 日韩大片在线永久免费观看网站| 日本v片免费一区二区三区| 亚洲色偷偷色噜噜狠狠99| 成年美女黄网站18禁免费| 亚洲色欲色欱wwW在线| 国产美女精品视频免费观看| 亚洲成在人线在线播放无码| 国产免费小视频在线观看| 美女免费视频一区二区| 国产亚洲视频在线播放| 国产午夜精品久久久久免费视| 亚洲AV乱码一区二区三区林ゆな| 日韩人妻一区二区三区免费| 亚洲欧洲精品视频在线观看| 性色av无码免费一区二区三区| 亚洲国产精品99久久久久久| 亚洲国产精品专区在线观看| 三年在线观看免费观看完整版中文| 亚洲国产另类久久久精品小说| 日韩电影免费在线观看中文字幕| 亚洲国产成人精品久久| 免费无码AV片在线观看软件| 亚洲av无码专区在线观看下载| 亚洲无码精品浪潮| 91大神在线免费观看| 亚洲乱码无人区卡1卡2卡3| 免费人成年激情视频在线观看| 久久www免费人成精品香蕉| 亚洲卡一卡2卡三卡4卡无卡三| 99在线视频免费观看视频| 深夜A级毛片视频免费| 亚洲av永久无码精品古装片| 中文字幕影片免费在线观看| gogo免费在线观看| 亚洲午夜精品在线| 4虎永免费最新永久免费地址| 亚洲夜夜欢A∨一区二区三区|