1. 程式人生 > >hibernate 中的count(*) 、group by 、group by having

hibernate 中的count(*) 、group by 、group by having

之前的一篇文章中我們也看到了count(*) 方法,這裡我們來學習count(*)  和group by 的查詢!

一、hql方式實現

1、使用hql語句來實現count(id) /count(*) 

Query  query= session.createQuery("select count(*)  from Event");
    int count= ((Number)query.uniqueResult()).intValue();
其中的Event 是javabean ,這個bean對應的也就是events這個表。

2、hql 查詢count(id)/count(*)

String hql= "select count(id) ,name from Event  where name =:name";
        Query query = session.createQuery(hql);
        Map<String,Object> map= new HashMap<String,Object>();
        map.put("name", "whd2");
        query.setProperties(map);
        List list= query.list();
        Iterator it= list.iterator();
        while(it.hasNext()){
            Object[] obj= (Object[])it.next();
        	// 注意這裡的型別轉化
        	int count= ((Number)obj[0]).intValue();
        	System.out.println("count:"+count);
            System.out.println(obj[0] +"-----"+obj[1]);  
        }	
3、hql實現count(id)/count(*)/group by 
 String hql="select count(id),name from Event group by name ";
       Query query = session.createQuery(hql);
       List list= query.list();
       Iterator it= list.iterator();
       while(it.hasNext()){
    	   Object[] res=(Object[]) it.next();
    	   //注意這裡的型別轉化
    	   int count= ((Number)res[0]).intValue();
    	   System.out.println("count"+count);
    	   System.out.println(res[0]+"    "+res[1]);
       }

4、hql實現分組統計count(id)/count(*)/group by having 

查詢出名稱相同的個數大於1的人

 String hql="select count(id),name from Event group by name having count(id)>1 ";
       Query query = session.createQuery(hql);
       List list= query.list();
       Iterator it= list.iterator();
       while(it.hasNext()){
    	   Object[] res=(Object[]) it.next();
    	   //注意這裡的型別轉化
    	   int count= ((Number)res[0]).intValue();
    	   System.out.println("count"+count);
    	   System.out.println(res[0]+"    "+res[1]);
       }


二、sql方式實現

1、使用sql語句來實現count(id)/count(*)

SQLQuery  query= session.createSQLQuery("select count(id) from events");
	//注意這裡如果寫Integer則會報錯,必須是Number 應為hibernate升級原因!
    int count = ((Number)query.uniqueResult()).intValue();
其中events就是表名,而Number是因為hibernate 升級為3.2的原因,也就是為了相容!

2、使用sql語句來實現count(id)/count(*)的方法

 // 其中的events是表名而不是javabean
        List list= session.createSQLQuery("select count(*) ,name from events").list();
        Iterator it= list.iterator();
        while(it.hasNext()){
        	Object[] obj= (Object[])it.next();
        	//注意這裡的型別轉化
        	int a= ((Number)obj[0]).intValue();
            System.out.println(obj[0] +"-----"+obj[1] +" "+a);  
        }

3、使用sql語句實現 count(id)/count(*)/ group by 
   String sql ="select count(id) ,name from events  group by name";
        Query query= session.createSQLQuery(sql);
        List list= query.list();
        Iterator it= list.iterator();
        while(it.hasNext()){
        	Object[] obj=(Object[]) it.next();
        	//注意這裡的型別轉化
        	int count=((Number)obj[0]).intValue();
        	System.out.println("count: "+count);
            System.out.println(obj[0]+" "+obj[1]);        	
        }

4、使用sql語句實現count(id)/count(*)/ group by  having 
 String sql ="select count(id) ,name from events  group by name having name=:name";
        Query query= session.createSQLQuery(sql);
        query.setParameter("name", "whd2");
        List list= query.list();
        Iterator it= list.iterator();
        while(it.hasNext()){
        	Object[] obj=(Object[]) it.next();
        	//注意這裡的型別轉化
        	int count=((Number)obj[0]).intValue();
        	System.out.println("count: "+count);
            System.out.println(obj[0]+" "+obj[1]);        	
        }


其實這些都不難,也沒有什麼知識點,但為什麼寫那,因為在當時專案中
用的時候怎麼獲取都報錯,其實查詢的過程是沒問題的,就是在int count=((Number)obj[0]).intValue(); 這個地方出了問題,所以一直報異常獲取不到資料,為什麼報異常那,是因為寫成了Integer 而不是Number所以要注意hibernate 升級到3.2 之後要寫成Number而不是Integer !

相關推薦

hibernate count(*) group by group by having

之前的一篇文章中我們也看到了count(*) 方法,這裡我們來學習count(*)  和group by 的查詢! 一、hql方式實現 1、使用hql語句來實現count(id) /count(*)  Query query= session.createQuery("

mysql:單表distinct多表group by查詢去除重複記錄

單表的唯一查詢用:distinct 多表的唯一查詢用:group by distinct 查詢多表時,left join 還有效,全連線無效, 在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供有distinct這個關鍵字來過濾掉多餘的重複記錄只保留一

DataTable進行DistinctGroup byJoinCreate

using System; using System.Collections; using System.Data; namespace Common { /**/ /// <summary> /// DataSet助手 參考資料:h

hive------ Group byjoindistinct等實現原理

map etc 條件 val log in use ins none 操作 1. Hive 的 distribute by Order by 能夠預期產生完全排序的結果,但是它是通過只用一個reduce來做到這點的。所以對於大規模的數據集它的效率非常低。在很多

關於group by group by havingwhere group bygroup by order by

姓名 函數 學生 art sco 分數 現在 大於 數學 轉載:https://blog.csdn.net/qq_28007533/article/details/72859474 現有表 score name kecheng fenshu 張三

mysql之資料型別和select語句(group by limit)

mysql之資料型別的理解 mysql資料型別之整形 mysql資料型別之浮點型 mysql資料型別之日期時間型 mysql資料型別之字元型 刪除記錄(單表刪除) delete from 表單 where id=5 select

07-Hive高階查詢order bygroup by

宣告:未經本人允許,不得轉載哦! 哈嘍,大家好。這兩天就要高考了,我原本是一名物理老師,這一屆初高中的學生帶完,估計就要開始找大資料崗位的工作了。目前掌握的是技能有java+linux++mysql+hadoop+hive+hbase,正在學習的是shell,計劃2016年接著要學習

一個sql的四種寫法:sum...case.whensum ifselect(select..)group by

select (select SUM(LOANEE_AMOUNT) FROM  t_zg_loanee_apply a WHERE  DELETE_STATUS = 0 ) as 'JE', (select SUM(LOANEE_AMOUNT) FROM  t_zg_loanee_apply a WH

Oracle DB 對行進行分組-group byhaving

通過列出多個GROUP BY列,可以返回組和子組的彙總結果。GROUP BY子句對行進行分組,但不保證結果集的順序。要對組進行排序,請使用ORDER BY子句。 在示例中,包含GROUP BY子句的SELECT語句按如下方式進行求值: • SELECT子句指定要檢索的列: - EMPLOYEES表中的部門I

distinctorder by group by實現原理

前言 除了常規的Join語句之外,還有一類Query語句也是使用比較頻繁的,那就是ORDERBY,GROUP BY以及DISTINCT這三類查詢。考慮到這三類查詢都涉及到資料的排序等操作,所以我將他們放在了一起,下面就針對這三類Query語句做基本的分析。 ORDE

sql 異常<除非另外還指定了 TOPOFFSET 或 FOR XML,否則,ORDER BY 子句在視圖內聯函數派生表子查詢和公用表表達式無效。>

select sel top percent 異常 子句 cor 查詢 表達 問題:當子查詢內存在ORDER BY 字句時查詢會報錯 SQL: SELECT * FROM (   SELECT * FROM USER ORDER BY USER_CORD ) S. 解

Hibernate的事務隔離問題(臟讀不可重復讀幻讀)

center 錯誤 新增 str 數據庫操作 持久性 有一個 tex rep Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀) 1.事務的特性 事務的四個特性: 1)原子性:事務是進行數據庫操作的最小單位,所以組成事務的各種操作是不可分割的 2)一致性:組成事務

Oracle count(1) count(*) 和count(列名) 函數的區別

select sdn 快的 包含 varchar2 into 要去 tails lan 1)count(1)與count(*)比較: 1、如果你的數據表沒有主鍵,那麽count(1)比count(*)快2、如果有主鍵的話,那主鍵(聯合主鍵)作為count的條件也比count

[Database] Oracle 的where 可以後接group by

emp dep group AS where rom rac mage ima SELECT e.DEPTNO,COUNT(e.EMPNO) FROM emp e WHERE e.DEPTNO=10 GROUP BY e.DEPTNO [Database] Oracle

基於C實現Word Count 將字符數單詞數行數,統計結果以指定格式輸出到默認文件

計算 具體實現 post 及其 sp2 註釋 程序設計 cnblogs 基本 基於C實現Word Count ---系統分析與設計課程個人項目作業 1. 項目地址: [gitee地址] (https://gitee.com/little-baby/WordCount-by-

linux關於用戶和組的幾個配置文件—/etc/passwd/etc/shadow/etc/group和/etc/gshadow

分隔 間隔 oem 配置文件 目錄 msg 密碼 login oldboy 1./etc/passwd存儲用戶信息 [root@oldboy ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bi

mysqlgroup by和order by同時使用無效的替代方案

前言 最近一年由於工作需要大部分使用的都是NoSql資料庫,對關係型資料庫感覺越來越陌生,一個由group by和order by 引發的血案由此而生。在此做個記錄,以備不時之需。 需求(得到所有barCode的最新的一條資料) 首先,看一下整體的表結構。 

在mysql使用group by和order by取每個分組日期最大一行資料

轉載自:https://blog.csdn.net/shiyong1949/article/details/78482737 自己實際使用的時候group by 單列欄位 兩種方式獲取資料一致,博主情況未知,有待驗證多group by  在mysql中使用group by進行分組後取某一列的最大

分享知識-快樂自己:Hibernate get() 和 load()savaupdatesavaOrUpdatemerge,不同之處及執行原理?

1):Hibernate 中 get()  和 load() 有什麼不同之處? 1)Hibernate的 get方法,會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在快取中查詢,還沒有就查詢資料庫,資料庫中沒有就返回null。 2)Hibernate的 load方法載入

資料庫count(1)count(*)count(列名)的總結

含義: 1、count(*) :統計所有的行數,包括為null的行(COUNT(*)不單會進行全表掃描,也會對錶的每個欄位進行掃描。而COUNT('x')或者COUNT(COLUMN)或者COUNT(0)等則只進行一個欄位的全表掃描)。 2、count(1):計算一共有多少符合條件的行(其實