文章出處

一、分組查詢

使用group by關鍵字對數據分組,使用having關鍵字對分組數據設定約束條件,從而完成對數據分組和統計

1.1 聚合函數:常被用來實現數據統計功能

① count() 統計記錄條數

② sum() 求和

③ min() 求最小值

④ max() 求最大值

⑤ avg() 求平均值

例子:查詢所有員工的平均工號

注:select語句查詢出來只有一個值,因此不能用list(),list投影出來的是一個集合。在這里提供uniqueResult()方法

     /*
     * 分組查詢  所有員工的平均工號   
     */
    
    @Test
    public void avgTest(){
        Query query=session.createQuery("select avg(empId) from Emp");
        Object count=query.uniqueResult();
        System.out.println(count);
    }

輸出結果:

 


 

二、子查詢

子查詢語句應用于HQL查詢語句的where子句中。

子查詢關鍵字:

all:子查詢語句返回的所有記錄

any:子查詢語句返回的任意一條記錄

some:和“any”意思相同

in:與“=any”意思相同

exists:子查詢語句至少返回一條記錄


 

例子:查詢所有員工工資都小于2000的部門

     /*
     * 子查詢   查詢所有員工工資都小于2000的部門
     */
    
    @Test
    public void childTest(){
        List<Dept> list=session.createQuery("from Dept d where 2000>all(select e.sal from d.emps e) and d.emps.size>0").list();
        for (Dept dept : list) {
            System.out.println(dept.getDeptName());
        }
    }

輸出結果:

 


 

 

三、原生SQL查詢和命名查詢

注:對于原生SQL查詢方式,使用Session的createSQLQuery()方法來創建SQLQuery對象,createSQLQuery()方法的參數是底層數據庫的sql語句,SQLQuery接口繼承了Query接口。該語句不能返回強類型的Dept對象,需使用addEntity()封裝到一個Dept實體類

例子:查詢部門名稱

     /*
     * 原生sql
     */
    
    @Test
    public void sqlTest(){
        SQLQuery query=session.createSQLQuery("select * from dept1").addEntity(Dept.class);
        List<Dept> list=query.list();
        for (Dept dept : list) {
            System.out.println(dept.getDeptName());
        }
    }
    

輸出結果:


 

命名查詢:在映射文件中定義字符串形式的查詢語句

將SQL語句配置到一個文件

如圖所示:


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()