Kela's Blog

                      前面的路很坎坷,但畢竟是條路.也許走過這一段就會發現,走過去就是夢想中的地方.因此堅持成為此刻唯一能做且必須去做的事情.
          posts - 9, comments - 27, trackbacks - 0, articles - 15

          kela的筆記 ORM產品 ---- hibernate(5)

          Posted on 2005-12-08 13:29 Kela 閱讀(306) 評論(0)  編輯  收藏 所屬分類: 我的筆記(Hibernate)

          Hibernate Query Language(HQL)

          相對于Criteria提供的符合面向對象風格的查詢封裝模式。HQL提供了更加豐富靈活的特性,它在涵蓋Criteria功能范圍的前提下,提供了更加強大的查詢(在Hibernate3中增加了實體的更新,刪除)能力。更多的HQL使用方法請參考Hibernate開發手冊和其它網絡資源。HQL為官方推薦查詢模式。
          示例:StudentCriteriaQuery.java一個基于HQL的查詢,更新,刪除。
          /**
           * StudentHQL.java
           * Hibernate Query Language(HQL)
           */
          package com.kela.hb.model;

          import java.util.Iterator;
          import java.util.List;

          import org.hibernate.HibernateException;
          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.Transaction;

          import com.kela.hb.pojo.KelaStudent;
          import com.kela.hb.util.HibernateUtil;


          /**
           * @author kangfeng(kela.kf@gmail.com)
           *
           */
          public class StudentHQL {
           
            /*
             * 實體查詢(查詢數據庫表中所有的紀錄)
             */
            public void exampleSelect_1(){
              Session session;
              Query query;
            
              String hql;
              try {
                 session = HibernateUtil.currentSession();
             
                 //查詢符合相應編號和年齡大于25的學生紀錄
                 hql = " from com.kela.hb.pojo.KelaStudent as kelaStudent " +
                          " where kelaStudent.stuID = '402880fc07dfe16f0107dfe173640001' " +
                          " or kelaStudent.stuAge > 25";
                query = session.createQuery(hql);
                List list = query.list();
                Iterator it = list.iterator();
                while(it.hasNext()) {
                   KelaStudent kelaStudent = (KelaStudent)it.next();
                   System.out.print("    姓名:" + kelaStudent.getStuName());
                   System.out.print("    性別:" + kelaStudent.getStuSex());
                   System.out.print("    年齡:" + kelaStudent.getStuAge());
                   System.out.print("    地址:" + kelaStudent.getStuAddress());
                   System.out.println();
                 }
              } catch(HibernateException he) {
                 System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
              } finally {
                 HibernateUtil.closeSession();
              }
           }
           
           /*
            * 屬性查詢(查詢數據庫表中需要的若干個字段)
            * 返回類型為數組方式
            */
           public void exampleSelect_2(){
             Session session;
             Query query;
            
             String hql;
             try {
                session = HibernateUtil.currentSession();
             
                //查詢KELA_STUDENT中字段為StuName,StuAge,StuAddress的所有紀錄
                //同樣也可以加一些條件
                hql = " select kelaStudent.stuName, kelaStudent.stuAge, kelaStudent.stuAddress " +
                         " from com.kela.hb.pojo.KelaStudent as kelaStudent ";
                query = session.createQuery(hql);
                List list = query.list();
                Iterator it = list.iterator();
                while(it.hasNext()) {
                   Object[] rs = (Object[])it.next();
                   System.out.print("    姓名:" + rs[0]);
                   System.out.print("    年齡:" + rs[1]);
                   System.out.print("    地址:" + rs[2]);
                   System.out.println();
                }
              } catch(HibernateException he) {
                 System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
              } finally {
                 HibernateUtil.closeSession();
              }
            }
           
           /*
            * 參數綁定(使用順序占位符 ? ),相當于我們經常使用的:
            * select * from KELA_STUDENT where KelaID = ?    and KelaAge > ?
            */
            public void exampleSelect_3(){
              Session session;
              Query query;
            
              String hql;
               try {
                  session = HibernateUtil.currentSession();
             
                  //查詢符合相應編號和年齡大于20的學生紀錄
                 hql = " from KelaStudent as kelaStudent " +
                          " where kelaStudent.stuID = ? or kelaStudent.stuAge >= ?";
                 query = session.createQuery(hql);
                 //注意了是從0開始的
                 query.setString(0, "402880fc07dfe16f0107dfe173640001");
                 query.setInteger(1, 20);
                 List list = query.list();
                 Iterator it = list.iterator();
                 while(it.hasNext()) {
                     KelaStudent kelaStudent = (KelaStudent)it.next();
                     System.out.print("    姓名:" + kelaStudent.getStuName());
                     System.out.print("    性別:" + kelaStudent.getStuSex());
                     System.out.print("    年齡:" + kelaStudent.getStuAge());
                     System.out.print("    地址:" + kelaStudent.getStuAddress());
                     System.out.println();
                 }
              } catch(HibernateException he) {
                 System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
              } finally {
                 HibernateUtil.closeSession();
              }
            }
           
            /*
             * 參數綁定(使用引用占位符 : ),相當于我們經常使用的:
             * select * from KELA_STUDENT where KelaID = ? and KelaAge > ?
             */
             public void exampleSelect_4(){
               Session session;
               Query query;
            
               String hql;
               try {
                  session = HibernateUtil.currentSession();
             
                   //查詢符合相應編號的學生紀錄
                   hql = " from KelaStudent as kelaStudent " +
                            " where kelaStudent.stuID = :stuID ";
                   query = session.createQuery(hql);
                   //stuID 對應 :stuID
                   query.setParameter("stuID", "402880fc07dfe16f0107dfe173640001");
                   List list = query.list();
                   Iterator it = list.iterator();
                   while(it.hasNext()) {
                       KelaStudent kelaStudent = (KelaStudent)it.next();
                       System.out.print("    姓名:" + kelaStudent.getStuName());
                       System.out.print("    性別:" + kelaStudent.getStuSex());
                       System.out.print("    年齡:" + kelaStudent.getStuAge());
                       System.out.print("    地址:" + kelaStudent.getStuAddress());
                       System.out.println();
                  }
               } catch(HibernateException he) {
                   System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
                } finally {
                   HibernateUtil.closeSession();
                }
             }
           
             /*
              * 利用HQL的更新
              */
             public void exampleUpdate() {
               Session session;
               Transaction tran;
               Query query;
            
               String hql;
               try {

                  session = HibernateUtil.currentSession();
                  tran = session.beginTransaction();
             
                   hql = " update KelaStudent " +
                            " set stuAge = 30 " +
                            " where stuID = '402880fc07dfe16f0107dfe173640001' ";
                   query = session.createQuery(hql);
                   System.out.println("更新的紀錄條數是:" + query.executeUpdate());
                   tran.commit();
               } catch (HibernateException he) {
                   System.out.println("[提示]: 更新數據發生錯誤," + he.getMessage());
               } finally {
                    HibernateUtil.closeSession();
                }
             }
           
            /*
             * 利用HQL的刪除
             */
            public void exampleDelete() {
              Session session;
              Transaction tran;
              Query query;
            
              String hql;
              try {
                  session = HibernateUtil.currentSession();
                  tran = session.beginTransaction();
             
                  hql = "delete KelaStudent where stuID = '402880fc080437200108043725760001'";
             
                 query = session.createQuery(hql);
                 System.out.println("刪除紀錄的條數是:" + query.executeUpdate());
                  tran.commit();
               } catch(HibernateException he) {
                  System.out.println("[提示]: 刪除數據發生錯誤," + he.getMessage());
               } finally {
                   HibernateUtil.closeSession();
               }
            }
            public static void main(String[] args) {
            
                StudentHQL studentHQL = new StudentHQL();
                 studentHQL.exampleSelect_1();
            }

          }

          分享到:
          主站蜘蛛池模板: 建湖县| 嘉义市| 如皋市| 武定县| 万源市| 上饶市| 和平区| 明溪县| 新野县| 佛冈县| 银川市| 黄大仙区| 武安市| 抚顺县| 任丘市| 女性| 馆陶县| 玉树县| 锦屏县| 萨嘎县| 丰顺县| 鄱阳县| 上虞市| 邢台县| 久治县| 墨竹工卡县| 尼勒克县| 廉江市| 抚远县| 万山特区| 邛崃市| 邓州市| 华亭县| 鹰潭市| 灵台县| 景谷| 四平市| 郯城县| 西峡县| 高青县| 资源县|