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

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

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

    隨筆-12  評論-1  文章-0  trackbacks-0

    HQL(Hibernate Query Language):是面向對象的查詢語句,它的語法和SQL語句有些相像,在運行時才得以解析.HQL并不像SQL那樣是數據操作語言,它用來取得對象,而不是進行update,delete和insert操作. HQL 是一門對大小寫不敏感的的語言,所以SeLect與SELECT和sELeCT是相同的.


    ----------------
    現在有四張表:student,team,course,student_course.

    student 表中有五個字段,分別是:id,name,cardId,age,team_id;   
    team      表中有兩個字段,id,teamname;
    course 表中有id,name;
    student_course 表中有stu_id,course_id;      保存多對多的關系表
    ----------------

    Student 是一個對象,student 是數據庫中的一個表.

    查詢所有的Student對象時,最簡單的HQL語句是: from Student,也可以寫成 select s from Student (as)s. 注:這的as可以省略

     


    1:簡單的查詢遍歷對象:

    遍歷Student

    Query query=session.createQuery("form Student");       //注: 如果Student對象不是唯一的,那么需要寫上包名,如: from test.Student      test為包名.
    List list=query.list();
    for(int i=0;i<list.size();i++)
    {
    Student stu=(Student)list.get(i);
    System.out.println(stu.getName());
    }

    注意: 如果執行HQL語句"from Student,Course",并不時單單返回兩個對象,而是返回兩個對象的笛卡爾積,這類似SQL語句中字段的全外連接.實際的應用中,"from Student,Course"這種語句幾乎是不回出現的.


    2:屬性查詢:

          ----單個屬性查詢:

    Query query=session.createQuery("select s.name form Student s");
    List list=query.list();
    for(int i=0;i<list.size();i++)
    {
    String name=(String)list.get(i);
    System.out.println(name);
    }

          ----多個屬性查詢:

    Query query=session.createQuery("select s.name,s.age form Student s");
    List list=query.list();
    for(int i=0;i<list.size();i++)
    {
    Object obj[]=(Object[])list.get(i);       //取得list中的第i個對象
    System.out.println(obj[0]+"的年齡為: "+obj[1]);
    }


    3:實例化查詢:

    實例化查詢結果可以說是對屬性查詢的一重改進.在使用屬性查詢時由于使用對象數組,操作和理解不太方便,如果將以個Object[]中的成員封裝成一個對象就方便多了.

    Query query=session.createQuery("select new Student(s.name,s.age) form Student s");
    List list=query.list();
    for(int i=0;i<list.size();i++)
    {
    Student stu=(Student)list.get(i);
    System.out.println(stu.getName());
    }

    注:運行這個程序的時候,需要一個new Student(s.name,s.age)構造函數.在Student.java中編寫這個構造函數.
    public Student(String name,int age)
    {
    this.name=name;
    this.age=age;
    }

     

    4:查詢鏈接:

    與SQL查詢一樣,HQL也支持連接查詢,如內連接,外連接和交叉連接.支持的鏈接類型是從ANSI SQL中借鑒來的.

          1: inner jion      (內連接)
    2: left outer join (左外連接)
    3: right outer join(右外連接)
    4: full join(全連接--不常用)

    inner jion 可以簡寫為join.

    正常情況下必須要建關聯。


    select a.id, b.id from A a, B b where a.id = b.id;
    上面每條記錄返回的是一個Object[]對象。
    你也可以把結果重新封裝一下。
    String hql = "select a.id, b.id from A a, B b where a.id = b.id";
    List result = getHibernateTemplate().find(hql);
    if (result.size() > 0) {
    for (int i = 0; i < result.size(); i++){
    Object[] obj = (Object[]) result.get(i);
    //這里就可以重新封裝數據
    }
    }


    5:統計函數查詢:

    1: count()       統計記錄的條數
    2: min() 求最小值
    3: max() 求最大值
    4: sum() 求和
    4: avg() 求平均值

    //取得Student的數量
    Query query=session.createQuery("select count(*) from Student")  

    //avg()取得Student平均年齡
    Query query=session.createQuery("select avg(s.age) from Student as s")  

    //upper()方法將字符串轉為大寫
    Query query=session.createQuery("select upper(s.name) from Student as s")  

    //去除重復行distinct
    Query query=session.createQuery("select distinct s.age from Student as s")  

     


    6:子查詢:
    all 表示所有記錄
    any 便是所有記錄中的任意一條
    somy 與any用法一樣
    in 等價于any
    exists 表示子查詢至少要返回一條數據.


    all:

    from Team t where 22<all(select s.age from Student s)

    from Team t where all(select s.age from      t.student s)>22

     


    7:修改

    update()

    Student stu=(Student)session.get(Student.class,"id");      //根據id 得到stu對象
    stu.setName("123");
    session.update(stu);


    8:刪除:

     

    delete()

    Student stu=(Student)session.get(Student.class,"id");      //根據id 得到stu對象
    session.delete(stu);

    posted on 2011-11-19 15:20 小熊寶貝的每一天 閱讀(236) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 本免费AV无码专区一区| 99久久婷婷国产综合亚洲| 成人免费夜片在线观看| 日韩午夜免费视频| 亚洲aⅴ无码专区在线观看春色| 韩国免费一级成人毛片| 亚洲AV色吊丝无码| 在线免费观看一级片| 亚洲中文字幕乱码一区| 最新中文字幕免费视频| 亚洲色大成网站www久久九 | 亚洲av综合avav中文| 免费一级不卡毛片| 久久精品国产亚洲av高清漫画| 999国内精品永久免费观看| 亚洲精品美女久久久久| 91免费资源网站入口| 亚洲AV无码一区二区三区性色| 无码专区一va亚洲v专区在线| 午夜在线免费视频| 亚洲国产婷婷六月丁香| 8x成人永久免费视频| 亚洲第一成人在线| 免费h成人黄漫画嘿咻破解版| 亚欧乱色国产精品免费视频| 日韩亚洲人成在线综合日本| 91网站免费观看| 在线观看亚洲网站| 亚洲不卡av不卡一区二区| 亚洲高清免费在线观看| 亚洲国产精品自在自线观看| 亚洲精品国产电影| 18女人毛片水真多免费| 妇女自拍偷自拍亚洲精品| 激情97综合亚洲色婷婷五 | 最近中文字幕无吗高清免费视频| 亚洲乱码国产乱码精华| 亚洲精品色午夜无码专区日韩| 中文字幕乱码免费视频| 日韩精品免费一线在线观看| 久久久久久亚洲精品成人|