Hibernate使用Query对象进行查询。Session的createQuery()方法能够创建Query实例,参数为HQL。Query对象能够返回各种类型的查询结果,
例如long、String、List<实体类>、List
list()返回零个或者多个值。
1.直接从实体对象进行查询,即只能查询该对象的所有列
@SuppressWarnings("unchecked")
public static void test1(){
Session session = HibernateSessionFactory.currentSession();
String hql = "from User u";
Query query = session.createQuery(hql);
List<User> user = query.list();
System.out.println("------------SQL执行完毕---------------");
for (User us : user) {
System.out.println(us.getName());
}
}
1.2在HQL中,不能使用select * from Student,但是可以使用别名 select stu from Student stu
public void test12() {
Session session = HibernateUtils.openSession();
Query query = session.createQuery("select stu from Student stu");
List<Student> stus = query.list();
for (Student stu : stus) {
System.out.println(stu);
}
}
1.3查询一个表的记录数(当查询结果唯一时,可以使用uniqueResult())
public void test13(){
String hql="select count(*) from Student";
Session session=HibernateUtils.openSession();
Long countRecord=(Long) session.createQuery(hql).uniqueResult();
int count=countRecord.intValue();
System.out.println(count);
}
2.如果想单独查询某一列,可以这样使用
@SuppressWarnings("unchecked")
public static void test2(){
Session session = HibernateSessionFactory.currentSession();
String hql = "select name from User u";
Query query = session.createQuery(hql);
List<String> user = query.list();
System.out.println("------------SQL执行完毕---------------");
for (String us : user) {
System.out.println(us);
}
}
3.如果想查询某几列的话,注意返回的内容不同,几列就是几个对象,这几个对象放在一个对象数组中
/**
* 查询某几列
*/
@SuppressWarnings("unchecked")
public static void test3(){
Session session = HibernateSessionFactory.currentSession();
String hql = "select id,name from User u";
Query query = session.createQuery(hql);
List user = query.list();
System.out.println("------------SQL执行完毕---------------");
for(Object obj : user){
Object[] arrObj = (Object[])obj;
System.out.println(arrObj[0] + "\t-->\t" + arrObj[1]);
}
}
关于查询某几列的详细说明:
Query的list()方法返回java.util.List对象。List中一般存储完整的实体类对象。例如select name from User u 会将所有的User属性都查询出来,
即包含User类的所有及时加载的属性(注意:此时懒加载的属性并不会加载)。
对于有些查询,我们只需要查询几个属性就够了,而不需要查询所有的实体类属性。这时候可以在HQL中指定要返回的部分。查询部分属性时,
返回结果仍然是List类型,里面可能是单个的Object,也可能是Object[]数组,还可能是List对象与Map对象,返回什么类型数据,由HQL语句决定。