Test.java:
package cn.xxx.demo;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.xxx.domain.Customer;
import cn.xxx.utils.HibernateUtils;
//学习HQL语法
public class Test {
//基本语法
@Test
public void fun1(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql = " select * from cn.xxx.domain.Customer "; //完整写法
String hql2 = " from Customer "; //简单写法 (整个工程中只有一个Customer类,可以省略包名)
String hql3 = " from java.lang.Object "; // 会查询所有配置过orm的数据表。(一般不这样使用)
Query query = session.createQuery(hql3);
List list = query.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//排序 order by
public void fun2(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql1 = " from cn.xxx.domain.Customer order by cust_id asc "; //升序
String hql2 = " from cn.xxx.domain.Customer order by cust_id desc "; //降序
Query query = session.createQuery(hql2);
List list = query.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//条件查询 where
public void fun3(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql1 = " from cn.xxx.domain.Customer where cust_id =? ";//完整写法
String hql2 = " from cn.xxx.domain.Customer where cust_id = :id ";//完整写法
Query query = session.createQuery(hql2);
query.setParameter(0, 2l); // 对应hql1
//query.setParameter("id", 2l); // 对应hql2
List list = query.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//分页查询
public void fun4(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql1 = " from cn.xxx.domain.Customer ";
Query query = session.createQuery(hql1);
//limit ?,?
// (当前页数-1)*每页条数
query.setFirstResult(0);
query.setMaxResults(10); // 每页条数
List list = query.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//统计查询 聚合函数
//count 计数
//sum 求和
//avg 平均数
//max
//min
public void fun5(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql1 = " select count(*) from cn.xxx.domain.Customer ";
String hql2 = " select sum(cust_id) from cn.xxx.domain.Customer ";
String hql3 = " select avg(cust_id) from cn.xxx.domain.Customer ";
String hql4 = " select max(cust_id) from cn.xxx.domain.Customer ";
String hql5 = " select min(cust_id) from cn.xxx.domain.Customer ";
Query query = session.createQuery(hql5);
Number number = (Number) query.uniqueResult(); // 查询结果只有一条记录用uniqueResult()
System.out.println(number);
//----------------------------------------------------
tx.commit();
session.close();
}
@Test
//投影查询 (查询部分列(对象属性))
public void fun6(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql1 = " select cust_name from cn.xxx.domain.Customer "; // 查询部分列(对象属性)。 默认查询所有列
String hql2 = " select cust_name,cust_id from cn.xxx.domain.Customer ";
// 每条查询记录封装成Customer对象
String hql3 = " select new Customer(cust_id,cust_name) from cn.xxx.domain.Customer "; //new Customer(cust_id,cust_name);Customer必须要有对应的构造函数,然后必须手动添加空参的构造函数。
Query query = session.createQuery(hql3);
List list = query.list();
System.out.println(list);
//----------------------------------------------------
tx.commit();
session.close();
}
}