日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询

發(fā)布時間:2023/12/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

hql語句和sql語句不同,當(dāng)我們使用hql語句查詢時,要把SQL語句的表寫成 實體類的類名,字段寫成實體類的屬性

  • 基本查詢:查出數(shù)據(jù)庫中所有的數(shù)據(jù)
    代碼如下:
  • //基本查詢,查詢所有的實體@Testpublic void test1() {//獲取當(dāng)前線程的sessionSession s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();Query query = s.createQuery("from Customer");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}

    我們應(yīng)當(dāng)注意這段代碼:

    Query query = s.createQuery("from Customer");

    執(zhí)行的hql語句是:from Customer
    但如果我們使用sql,語句是:

    select * from cst_customer(cst_customer是我數(shù)據(jù)庫中的表名)

    其中我們可以發(fā)現(xiàn),使用hql只要把sql的表名換成實體類名就可以了,而且 select * 都可以不要

  • 條件查詢:按條件查詢出數(shù)據(jù)庫的數(shù)據(jù)
    代碼如下:
  • //條件查詢@Testpublic void test2() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();//Query query = s.createQuery("from Customer where custName = ?");//取別名Query query = s.createQuery("from Customer where custName = :custName");//query.setString(0, "23");//query.setParameter(0, "23");query.setParameter("custName", "23");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}

    當(dāng)我們使用條件查詢時,我們不僅要把表名換成實體類,還要把數(shù)據(jù)庫的列名換成屬性名:

    from Customer where custName = ?

    然后使用下面代碼設(shè)置參數(shù):

    query.setString(0, "23");

    可以發(fā)現(xiàn)我把這些代碼注釋掉了,這些方法不夠具體,我們可以使用別名設(shè)置參數(shù),如下代碼

    from Customer where custName = :custName

    :后面的是別名,我們給參數(shù)賦值時可以使用一下代碼就不用考慮具體參數(shù)的類型了

    query.setParameter("custName", "23");
  • 排序插敘:order by
  • //排序查詢@Testpublic void test3() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();//根據(jù)custId排序Query query = s.createQuery("from Customer order by custId");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
  • 分頁查詢:使用 order by ,在后面加上屬性名就可以了
  • @Testpublic void test4() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();//查詢?nèi)繑?shù)據(jù),每頁顯示兩條數(shù)據(jù)Query query = s.createQuery("from Customer");query.setFirstResult(0);query.setMaxResults(2);List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}
  • 投影查詢: 當(dāng)我們在查詢實體時,只需要部分實體的屬性。并且希望返回的結(jié)果使用實體類封裝,而不是Object[]
    使用步驟:1、查詢語句需要使用new關(guān)鍵字
    2、在實體類中添加對應(yīng)參數(shù)列表的構(gòu)造函數(shù)
  • 代碼如下:

    @Testpublic void test5() {Session s = HibernateUtils.getCurrentSession();Transaction t = s.beginTransaction();Query query = s.createQuery("select new domain.Customer(custId,custName) from Customer");List list = query.list();for(Object o : list) {System.out.println(o);}t.commit();}

    在實體類中添加對應(yīng)參數(shù)列表的構(gòu)造函數(shù),注意無參構(gòu)造函數(shù)實體類中一定不能省

    public Customer(Long custId, String custName) {this.custId = custId;this.custName = custName;}

    注意在使用hql語句時,實體類要加上路徑,因為在一個工程里,當(dāng)有多個相同類名,就不知道創(chuàng)建那個實體類了

    總結(jié)

    以上是生活随笔為你收集整理的Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。