第一种方法
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()
就可以。
初学,某些地方表述不准确,希望不要对更加初学的人引错了路。