hibernate 之 HQL語句總結【轉】

Franson發表於2016-12-28

1. 查詢整個對映物件所有欄位

//直接from查詢出來的是一個對映物件,即:查詢整個對映物件所有欄位   
        String hql = "from Users";   
        Query query = session.createQuery(hql);   
            
        List<Users> users = query.list();   
        for(Users user : users){   
            System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());   
        }   
   
 輸出結果為:   
name1 : password1 : 1 
name2 : password2 : 2 
name3 : password3 : 3 

2.查詢欄位 

//查詢其中幾個欄位   
        String hql = " select name,passwd from Users";   
        Query query = session.createQuery(hql);   
        //預設查詢出來的list裡存放的是一個Object陣列   
        List<Object[]> list = query.list();   
        for(Object[] object : list){   
            String name = (String)object[0];   
            String passwd = (String)object[1];   
                
            System.out.println(name + " : " + passwd);   
        }   
輸出結果為:   
name1 : password1   
name2 : password2   
name3 : password3  

3.修改預設查詢結果(query.list())不以Object[]陣列形式返回,以List形式返回

//查詢其中幾個欄位,新增new list(),注意list裡的l是小寫的。也不需要匯入包,這樣通過query.list()出來的list裡存放的不再是預設的Object陣列了,而是List集合了  
         String hql = " select new list(name,passwd) from Users";   
        Query query = session.createQuery(hql);   
        //預設查詢出來的list裡存放的是一個Object陣列,但是在這裡list裡存放的不再是預設的Object陣列了,而是List集合了   
        List<List> list = query.list();   
        for(List user : list){   
            String name = (String)user.get(0);   
            String passwd = (String)user.get(1);   
                
            System.out.println(name + " : " + passwd);   
        }   
        /**  
        輸出結果為:  
         name1 : password1  
        name2 : password2  
        name3 : password3  
         */ 

4.修改預設查詢結果(query.list())不以Object[]陣列形式返回,以Map形式返回

//查詢其中幾個欄位,新增new map(),注意map裡的m是小寫的。也不需要匯入包,這樣通過query.list()出來的list裡存放的不再是預設的Object陣列了,而是map集合了   
        String hql = " select new map(name,passwd) from Users";   
        Query query = session.createQuery(hql);   
        //預設查詢出來的list裡存放的是一個Object陣列,但是在這裡list裡存放的不再是預設的Object陣列了,而是Map集合了   
        List<Map> list = query.list();   
        for(Map user : list){   
            //一條記錄裡所有的欄位值都是map裡的一個元素,key是字串0,1,2,3....,value是欄位值   
            //如果將hql改為:String hql = " select new map(name as username,passwd as password) from Users";,那麼key將不是字串0,1,2...了,而是"username","password"了   
            String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字串,而不是整形   
            String passwd = (String)user.get("1");   
                
            System.out.println(name + " : " + passwd);   
        }   
        /**  
        輸出結果為:  
         name1 : password1  
        name2 : password2  
        name3 : password3  
         */ 

5.條件查詢

//條件查詢,引數索引值從0開始,索引位置。通過setString,setParameter設定引數   
        String hql = "from Users where name=? and passwd=?";   
        Query query = session.createQuery(hql);   
        //第1種方式   
//      query.setString(0, "name1");   
//      query.setString(1, "password1");   
        //第2種方式   
        query.setParameter(0, "name1",Hibernate.STRING);   
        query.setParameter(1, "password1",Hibernate.STRING);   
        List<Users> list = query.list();   
        for(Users users : list){   
            System.out.println(users.getId());   
        }   
 

//條件查詢,自定義索引名(引數名):username,:password.通過setString,setParameter設定引數   
        String hql = "from Users where name=:username and passwd=:password";   
        Query query = session.createQuery(hql);   
        //第1種方式   
//      query.setString("username", "name1");   
//      query.setString("password", "password1");   
        //第2種方式,第3個引數確定型別   
        query.setParameter("username", "name1",Hibernate.STRING);   
        query.setParameter("password", "password1",Hibernate.STRING);   
        List<Users> list = query.list();   
        for(Users users : list){   
            System.out.println(users.getId());   
        }  
  

//條件查詢,通過setProperties設定引數   
        String hql = "from Users where name=:username and passwd=:password";   
        Query query = session.createQuery(hql);   
        //MyUser類的2個屬性必須和:username和:password對應   
        MyUser myUser = new MyUser("name1","password1");   
        query.setProperties(myUser);   
        List<Users> list = query.list();   
        for(Users users : list){   
            System.out.println(users.getId());   
        }  

7.update 資料( 執行SQL語句(為什麼要用SQL語句,我想是為了執行某些複雜的SQL語句吧))

String sql="update Table set field = 'test'"
Session session = HibernateSessionFactory.getSession();
session.createSQLQuery(sql).executeUpdate();
ts.commit();

執行HQL語句

String hql="update Table set field = 'test'"
Session session = HiberanteSessionFactory.getSession();
Transaction ts = session.beginTransaction();
Query query = session.createQuery(hql);
query.executeUpdate();
ts.commit();

 

相關文章