初探Struts + Hibernate(二) --从HQL中取值

第一种方法
    public static  LinkedList LoadUser(){     
       LinkedList list = new LinkedList() ;
       try{
           Session session = HibernateUtil.currentSession() ;
           Transaction tx = session.beginTransaction();
           Query query = session.createQuery(" from User  ");
           List l = query.list();
           for (int i=0; i< l.size(); i++) {
             User user = (User)l.get(i);
             list.add(user);
           }
           tx.commit();  
           session.close() ;
        }catch(HibernateException hex){
           System.out.print(hex) ;  
        }  
        return list ;
 
调用时可以这样
    LinkedList list = new  UserQuery().LoadUser();
    Iterator it = list.iterator();
    while(it.hasNext()){
        User user = (User)it.next();
        out.println(user.getUsername());
      }
  这样列出用户列表
" from User  " 这种查询中它返回的 List 中,内置的是一个个 PO ,在这里就是 User ,我们用它的 getter 就可以取得一行行记录
特别要注意的是 HQL 不是直接从数据里可数据,而是从你的持久化对像中,所以待查对像名是大小写敏感的, User 不可写成 user ,但是 select from 等这些词,可以随意大小写。(昨天在这里浪费了一些时间,痛心,所以特意记下来)
 
第二种方法:
    public static void main(String[] args){
       try{
         Session session = HibernateUtil.currentSession() ;
         Transaction tx = session.beginTransaction() ;
          Query query = session.createQuery("select a.Username,a.Id from User as a") ;
          List l = query.list() ;
          for (int i = 0 ;i < l.size() ;i++)
           {
               Object[] row = (Object[])l.get(i) ;
               String username = (String)row[0] ;
               Integer id = (Integer)row[1] ;
               System.out.println("username:"+username);
               System.out.println("userid:"+id.intValue());
           }
           session.close() ;
       }catch(HibernateException hex){
        System.out.println(hex);  
       }
    }
 
在这样的 "select a.Username,a.Id from User as a" 查询中,指明了属性名,返回的是一个 Object[] 的一维数组,里内置的是你顺次指定的属性,所以可以 String username = (String)row[0] 这样来取,之前要确认 row[0] 是可以安全转化为 String row[1] 可以安全转化为 int 等。
这里写的是最简单的取多属性的二种方法,当然取一个属性的很简单,直接 list.iterator().next() 就可以。
 
初学,某些地方表述不准确,希望不要对更加初学的人引错了路。

你可能感兴趣的:(Hibernate,struts,职场,休闲)