国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate(九)HQL查詢

2019-11-14 23:17:26
字體:
來源:轉載
供稿:網友
Hibernate(九)HQL查詢一、Hibernate提供的查詢方式
  • OID查詢方式:主鍵查詢。通過get()或者load()方法加載指定OID的對象查詢結果為一個
  • HQL查詢方式:通過Query接口使用HQL語言進行查詢
  • QBC查詢方式:通過Criteria等接口和類進行是查詢
  • 本地SQL查詢方式:使用原生的SQL語言進行查詢
  • 對象導航查詢方式:通過已經加載的對象,導航到其關聯對象

其中HQL和QBC是Hibernater提供的專業的查詢方式

HQL查詢方式為官方推薦的標準查詢方式

二、HQL查詢簡述

HQL:Hibernate Query Language

這種語言看上去很像SQL。但是不要被語法結構 上的相似所迷惑,HQL是非常有意識的被設計為完全面向對象的查詢,它可以理解如繼承、多態 和關聯之類的概念。

例如:

                //1.得到session        Session session=HibernateSessionFactory.getSession();        //2。創建查詢語句這里的Student為持久化類的,類名        String hql="from Student";        //String hql="from Student where sname='張三'";        //3.創建Query對象        Query query=session.createQuery(hql);        //4.執行查詢  返回結果為list集合        List<Student>  list=query.list();        //5.輸出結果        for (Student stu : list) {            System.out.PRintln(stu.getSname()+stu.getSex());        }                    
三、最簡單的查詢

查詢全部信息

from Student    //直接使用持久化類名from com.pb.entity.Student  //使用全路徑

通常我們不需要使用類的全限定名, 因為auto-import(自動引入) 是缺省的情況。

也可以為類名指定別名

from Student as s     //使用as 關鍵字指定類的別名from Student s  //省略as 關鍵字指定類的別名
四、where子句

也可以支持where子句

from Student where sid=201503011from Student  s where s.sid=201503011
4.1、在where中可以使用各種運算符

例如:

from Student where sex='男' and sid<11070200//查詢學生性別 為男同時,學號小于 11070200的學生from Student where sid between 11070100 and 11070200//查詢學生學號在11070100 and 11070200之間的學生from Student where  snamelike '%飛';//查詢學生姓名最后一個字為飛的全部學生from Student where sname like '_ik*';//查詢學生姓名,第一個字為任意,第2個為i,第3個為k,后面任意長度的學生

其中"-"匹配單個字符

"%"匹配任意長度的字符

"_"不可以進行漢字匹配,"%"可以進行漢字匹配

五、返回結果

Query的方法

5.1、list()方法
//1.得到session        Session session=HibernateSessionFactory.getSession();        //2。創建查詢語句這里的Student為持久化類的,類名        String hql="from Student";        //String hql="from Student where sid=201503011 ";        //3.創建Query對象        Query query=session.createQuery(hql);        //4.執行查詢  返回結果為list集合        List<Student>  list=query.list();        //5.輸出結果        for (Student stu : list) {            System.out.println(stu.getSname()+stu.getSex());        }
5.2、iterate()方法
//1.得到session        Session session=HibernateSessionFactory.getSession();        //2。創建查詢語句這里的Student為持久化類的,類名        String hql="from Student";        //String hql="from Student where sid=201503011 ";        //3.創建Query對象        Query query=session.createQuery(hql);        //4.執行查詢  返回結果為Iterator        Iterator<Student>  iterator=query.iterate();        //5.輸出結果        while(iterator.hasNext()){            Student stu=iterator.next();            System.out.println(stu.getSname()+stu.getSex());        }        
5.3、uniqueResult()方法

返回的結果為一個對象,一般用來根據主鍵查詢

//1.得到session        Session session=HibernateSessionFactory.getSession();        //2。創建查詢語句這里的Student為持久化類的,類名        //String hql="from Student";        String hql="from Student where sid=201503011 ";        //3.創建Query對象        Query query=session.createQuery(hql);        //4.執行查詢  返回結果為Object類型,        Student student=(Student) query.uniqueResult();        //5.輸出結果        System.out.println(student.getSname()+student.getSex());
5.4、list()和iterate()方法區別

兩都的查詢機制不同

使用list()時,只需要查詢一次就可以完成全部持久化類的,全部字段的查詢

使用iterate()時,第一次查詢出來的是全部記錄的主鍵ID,然后再去系統緩存中查詢相應的記錄,如果有這個ID的記錄, 將不進行數據庫查詢,如果沒有將進行數據庫查詢,有多少條記錄就要查詢1+N次。

六、屬性查詢(投影查詢)6.1、直接指定屬性查詢

返回結果為Object數組,數組的長度為屬性的個數

public static void findByproperty(){        //1.得到session        Session session=HibernateSessionFactory.getSession();        //2。創建查詢語句這里的Student為持久化類的,類名        //String hql="from Student";        String hql="select sid,sname,sex from Student ";        //3.創建Query對象        Query query=session.createQuery(hql);        //4.執行查詢  返回結果為Object類型,        List list=query.list();        //5.輸出結果        for (Object object : list) {            //結果為查詢屬性數據 的Object對象數組            Object [] obj=(Object[]) object;            System.out.println(obj[0]+"/t"+obj[1]+"/t"+obj[2]);        }            }
6.2、使用構造方法查詢

前提是持久化類中要有這個構造方法

返回結果為持久化類的對象集合

public static void findByCons(){        //1.得到session        Session session=HibernateSessionFactory.getSession();        //2。創建查詢語句這里的Student為持久化類的,類名        //String hql="from Student";        String hql="select new Student(sid,sname,sex) from Student ";        //3.創建Query對象        Query query=session.createQuery(hql);        //4.執行查詢  返回結果為Object類型,        List<Student> list=query.list();        //5.輸出結果        for (Student stu : list) {            System.out.println(stu.getSname()+"/t"+stu.getSex());        }            }

這種更直接,明了解,一定要有相應的構造方法

七、實體更新和刪除7.1、更新
    Session session =new Configuration().configure().buildSessionFactory().openSession();        Student stu=(Student) session.get(Student.class, 201509009);                Course cou=(Course) session.get(Course.class, 2222);                Transaction tran=session.beginTransaction();        stu.getCourses().add(cou);        session.update(stu);        tran.commit();        session.close();
View Code7.2、刪除
Session session =new Configuration().configure().buildSessionFactory().openSession();        Student stu=(Student) session.get(Student.class, 201509009);                Course cou=(Course) session.get(Course.class, 2222);                Transaction tran=session.beginTransaction();        stu.getCourses().remove(cou);        session.update(stu);        tran.commit();        session.close();
View Code八、參數綁定8.1占位符、

和JDBC中一樣使用?來占位

8.2、命名參數

九、排序

十、統計函數

    public static void findCount(){        Session session=new Configuration().configure().buildSessionFactory().openSession();        /*String hql="from Emp";        Query query=session.createQuery(hql);        List list=query.list();        int count=list.size();*/        String hql="select count(*) from Emp";        Query query=session.createQuery(hql);        Long count=(Long) query.uniqueResult();        System.out.println("員工表總記錄數:"+count);            }    
View Code


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西乌珠穆沁旗| 大余县| 和林格尔县| 安宁市| 沙洋县| 金华市| 哈尔滨市| 鸡西市| 高陵县| 邳州市| 五华县| 丹巴县| 乐亭县| 五寨县| 乐东| 于田县| 保山市| 苍山县| 黔东| 舞阳县| 客服| 九龙城区| 兴山县| 子洲县| 普兰店市| 安宁市| 渝中区| 奉贤区| 灌云县| 土默特左旗| 普定县| 临夏市| 大关县| 寻乌县| 泽州县| 株洲市| 蒲城县| 敖汉旗| 赤壁市| 望奎县| 东海县|