HQL ,Hibernate Query Language ,是Hibernate查詢語言,不直接操作資料表,而是操作實體類,根據實體類和對應資料表中的對映關係,查詢資料。

下面是hql的基本步驟:

 1.獲取session 

  session=new Configuration().configure().buildSessionFactory().openSession();

 2.構建hql語句
  String hql="from Dept ";

 3.得到query物件
  Query query=session.createQuery(hql);

 4.得到查到的結果

  List<Dept> list=query.list();

  或者

  Iterator<Dept> it=query.iterate();

下面是幾個hql例子

①職位是店員,如:job='CLERK'

工資大於1000元,如:salary>1000

 入職時間在1981年4月1日至1985年9月9日之間

 public void SearchCondition(){
/**
* 職位是店員,如:job='CLERK'
* 工資大於1000元,如:salary>1000
* 入職時間在1981年4月1日至1985年9月9日之間
*/
Session session=null;
try {
session=new Configuration().configure().
buildSessionFactory().openSession();
//1.通過輔助類物件統一處理命名引數
//建立輔助類的物件
ConditionEmp cm=new ConditionEmp();
cm.setJob("CLERK");
cm.setSalary(566666);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
cm.setHireDateBegin(sdf.parse("2000-10-27"));
cm.setHireDateEnd(sdf.parse("2003-12-12")); StringBuilder hql=new StringBuilder("from Emp as emp where 1=1"); //上面的資料有的有,有的木有
if(null!=cm.getJob()){
//工作不是空的
hql.append(" and emp.job=:job");
} if(0!=cm.getSalary()){
hql.append(" and emp.salary>:salary");
}
if(null!=cm.getHireDateBegin()){
hql.append(" and emp.hiredate>:hireDateBegin");
}
if(null!=cm.getHireDateEnd()){
hql.append(" and emp.hiredate<:hireDateEnd");
}
Query query=session.createQuery(hql.toString());
//處理命名引數
query.setProperties(cm); List<Emp> list=query.list();
for (Emp emp : list) {
System.out.println(emp.getEmpno());
System.out.println(emp.getEmpname());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}

② hql分頁

  

 public void pageDemo(){
Session session=null;
try {
session=new Configuration().configure().
buildSessionFactory().openSession();
String hql="from Emp order by empno"; Query query=session.createQuery(hql);
//每頁顯示幾條資料
int pageSize=2; //計算總記錄(總條數)
String countHql="select count(*) from Emp"; //接收數字
int count=((Long)session.createQuery(countHql).uniqueResult()).intValue(); //計算總頁數
int totalPage=(count%pageSize==0)?(count/pageSize):(count/pageSize+1); //頁號
int pageIndex =1; //設定每頁顯示的最大記錄數字
query.setMaxResults(pageSize);
//設定從第幾條開始輸出,不包括該條
query.setFirstResult((pageIndex-1)*pageSize); List<Emp> list=query.list();
System.out.println("總頁數是:"+totalPage); for (Emp emp : list) {
System.out.println(emp.getEmpno());
System.out.println(emp.getEmpname()); } } catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}