hibernate——HQL查询总结
HQL概述:
HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式.
list : 查询结果多个
uniqueResult : 查询结果唯一
HQL的简单查询
// 简单查询:
String hql = "from Customer";
//方法一
Query query = session.createQuery(hql);
List<Customer> list = query.list();
//方法二
List<Customer> list = session.createQuery(hql).list();
HQL的别名查询:
// 别名查询:
//String hql = "from Customer asc";
//String hql = "from Customer c";
String hql = "select c from Customer c";
HQL的多态查询:
String hql = "from java.lang.Object";
String hql = "from java.io.Serializable";
HQL的排序查询:
String hql = "from Customer order by age asc";
String hql = "from Customer order by age desc";
HQL的分页查询:
Query query = session.createQuery("from Order");
query.setFirstResult(10);
query.setMaxResults(10);
List<Order> list = query.list();
HQL检索单个对象:
Query query = session.createQuery("from Customer where cname = ?");
query.setParameter(0, "张三");
Customer customer = (Customer) query.uniqueResult();
HQL的条件查询:
/**
* HQL条件查询 * 按位置绑定参数:
*/
// 1.根据名称进行查询
List<Customer> list = session
.createQuery(
"from Customer where cname = ?")
.setParameter(0,"张三").list();
System.out.println(list.get(0));
// 2.根据名称进行查询
List<Customer> list = session
.createQuery(
"from Customer c where c.cname = ?")
.setParameter(0,"张三").list();
System.out.println(list.get(0));
// 3.条件并列:
List<Customer> list = session
.createQuery(
"from Customer where cname like ? and age >= ?")
.setParameter(0, "任%").setParameter(1, 35).list();
for (Customer customer : list) {
System.out.println(customer);
}
/**
* HQL条件查询 * 按名称绑定参数:
*/
List<Customer> list = session
.createQuery(
"from Customer where cname like :cname and age >= :age")
.setParameter("cname", "任%").setParameter("age", 35).list();
for (Customer customer : list) {
System.out.println(customer);
}
HQL使用聚集函数:
//count()/max()/min()/avg()/sum()
String hql = "select count(*) from Order";
Long num = (Long) session.createQuery(hql).uniqueResult();
HQL分组统计:
String hql = "select o.customer.cname,count(*) from Order o group by o.customer.cname";
List<Object[]> list = session.createQuery(hql).list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
HQL的投影查询:
String hql = "select cname from Customer";
List<String> list = session.createQuery(hql).list();
for (String cname : list) {
System.out.println(cname);
}
String hql = "select age from Customer";
List<Integer> list = session.createQuery(hql).list();
for (Integer age : list) {
System.out.println(age);
}
String hql= "select cname,age from Customer";
List<Object[]> list = session.createQuery(hql).list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
// 使用构造函数的方式进行投影查询.
String hql = "select new Customer(cname,age) from Customer";
List<Customer> list = session.createQuery(hql).list();
for (Customer customer : list) {
System.out.println(customer);
}