yxhxj2006

          常用鏈接

          統(tǒng)計(jì)

          最新評論

          hibernate查詢方法對比

          HQL查詢

          HQL是hibernate自己的一套查詢語言,于SQL語法不同,具有跨數(shù)據(jù)庫的優(yōu)點(diǎn)。示例代碼:

          [java] 
          static void query(String name){ 
            Session s=null; 
            try{ 
             s=HibernateUtil.getSession(); 
              
             //from后面是對象,不是表名 
             String hql="from Admin as admin where admin.aname=:name";//使用命名參數(shù),推薦使用,易讀。 
             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(); 
            } 
           } 
          適用情況:常用方法,比較傳統(tǒng),類似jdbc。缺點(diǎn):新的查詢語言,適用面有限,僅適用于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(); 
            } 
           } 
          適用情況:面向?qū)ο蟛僮?,革新了以前的?shù)據(jù)庫操作方式,易讀。缺點(diǎn):適用面較HQL有限。


          動態(tài)分離查詢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("離線查詢返回結(jié)果:" + users); 

          適用情況:面向?qū)ο蟛僮?,分離業(yè)務(wù)與底層,不需要字段屬性攝入到Dao實(shí)現(xiàn)層。  缺點(diǎn):適用面較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; 
           } 
          適用情況:面向?qū)ο蟛僮鳌?nbsp;  缺點(diǎn):適用面較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的朋友,又不打算轉(zhuǎn)數(shù)據(jù)庫平臺的朋友,萬能方法   缺點(diǎn):破壞跨平臺,不易維護(hù),不面向?qū)ο蟆?/p>


          命名查詢

          [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,不推薦使用,影響跨數(shù)據(jù)庫 
              <sql-query name="getUserById2"> 
               <![CDATA[select * from User where ]]> 
              </sql-query> --> 
          </hibernate-mapping>

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 德保县| 平舆县| 宜兰县| 江油市| 民勤县| 肥东县| 高雄市| 兴业县| 青海省| 徐闻县| 麦盖提县| 宾川县| 德钦县| 杂多县| 塔城市| 清涧县| 墨脱县| 阜城县| 宁晋县| 云龙县| 宁乡县| 安庆市| 临西县| 甘洛县| 谷城县| 肇东市| 福泉市| 永春县| 江北区| 尚义县| 皮山县| 原阳县| 库尔勒市| 驻马店市| 临漳县| 虹口区| 婺源县| 潜江市| 西昌市| 雅江县| 锦屏县|