yxhxj2006

          常用鏈接

          統計

          最新評論

          hibernate查詢方法對比

          HQL查詢

          HQL是hibernate自己的一套查詢語言,于SQL語法不同,具有跨數據庫的優點。示例代碼:

          [java] 
          static void query(String name){ 
            Session s=null; 
            try{ 
             s=HibernateUtil.getSession(); 
              
             //from后面是對象,不是表名 
             String hql="from Admin as admin where admin.aname=:name";//使用命名參數,推薦使用,易讀。 
             Query query=s.createQuery(hql); 
             query.setString("name", name); 
              
             List<Admin> list=query.list(); 
              
             for(Admin admin:list){ 
              System.out.println(admin.getAname()); 
             } 
            }finally{ 
             if(s!=null) 
             s.close(); 
            } 
           } 
          適用情況:常用方法,比較傳統,類似jdbc。缺點:新的查詢語言,適用面有限,僅適用于Hibernate框架。


          對象化查詢Criteria方法:

          [java] 
          static void cri(String name,String password){ 
            Session s=null; 
            try{ 
             s=HibernateUtil.getSession(); 
              
             Criteria c=s.createCriteria(Admin.class); 
             c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或 
             c.add(Restrictions.eq("apassword", password)); 
              
             List<Admin> list=c.list(); 
             for(Admin admin:list){ 
              System.out.println(admin.getAname()); 
             } 
            }finally{ 
             if(s!=null) 
             s.close(); 
            } 
           } 
          適用情況:面向對象操作,革新了以前的數據庫操作方式,易讀。缺點:適用面較HQL有限。


          動態分離查詢DetachedCriteria

          [java] 
          static List dc(DetachedCriteria dc) { 
           
            Session s = HibernateUtil.getSession(); 
            Criteria c = dc.getExecutableCriteria(s); 
            List rs = c.list(); 
            s.close(); 
            return rs; 
           } 

          [java]
          DetachedCriteria dc = DetachedCriteria.forClass(User.class); 
            int id = 1; 
            if (id != 0) 
             dc.add(Restrictions.eq("id", id)); 
            Date age = new Date(); 
            if (age != null) 
             dc.add(Restrictions.le("birthday", age)); 
            List users = dc(dc); 
            System.out.println("離線查詢返回結果:" + users); 

          適用情況:面向對象操作,分離業務與底層,不需要字段屬性攝入到Dao實現層。  缺點:適用面較HQL有限。


          例子查詢

          [java]
          static List example(User user) { 
            Session s = HibernateUtil.getSession(); 
            List<User> users = s.createCriteria(User.class).add( 
              Example.create(user)).list(); 
            // List<User> 
            // users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase()) 
            // .createCriteria("child").add((Example.create(user))).list(); 
            return users; 
           } 
          適用情況:面向對象操作。   缺點:適用面較HQL有限,不推薦。


          sql查詢

          [java]
          static List sql() { 
           
            Session s = HibernateUtil.getSession(); 
            Query q = s.createSQLQuery("select * from user").addEntity(User.class); 
            List<User> rs = q.list(); 
            s.close(); 
            return rs; 
           } 
          適用情況:不熟悉HQL的朋友,又不打算轉數據庫平臺的朋友,萬能方法   缺點:破壞跨平臺,不易維護,不面向對象。


          命名查詢

          [java]
          static List namedQuery(int id) { 
            Session s = HibernateUtil.getSession(); 
            Query q = s.getNamedQuery("getUserById"); 
            q.setInteger("id", id); 
            return q.list(); 
           } 

          [html]
          <?xml version="1.0" encoding="utf-8"?> 
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
           
          <hibernate-mapping> 
              <class name="com.sy.vo.User" table="user" catalog="news"> 
               
            
           
              </class> 
              <!-- 命名查詢:定義查詢條件 --> 
              <query name="getUserById"> 
               <![CDATA[from User where id=:id]]> 
              </query> 
              <!-- 命名查詢中使用sql,不推薦使用,影響跨數據庫 
              <sql-query name="getUserById2"> 
               <![CDATA[select * from User where ]]> 
              </sql-query> --> 
          </hibernate-mapping>

          posted on 2012-06-29 13:34 奮斗成就男人 閱讀(906) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 合作市| 赫章县| 江达县| 乐昌市| 越西县| 文安县| 巴东县| 开化县| 开阳县| 天门市| 贡嘎县| 遵化市| 赫章县| 吴川市| 贵南县| 南涧| 盘山县| 苍南县| 淳安县| 吉首市| 通江县| 和平县| 乐东| 陕西省| 麻阳| 璧山县| 汉阴县| 南召县| 南澳县| 屏东市| 凤山市| 平塘县| 乾安县| 鹤庆县| 洱源县| 方山县| 红安县| 都兰县| 瓦房店市| 潼关县| 中卫市|