HQL-Query查詢中的佔位符處理到動態分頁查詢
阿新 • • 發佈:2019-02-17
//查詢語句:採用別名(:ename)代替(?),set時不再使用位置引數下標,而是命名引數別名來賦值。
public void queryDept(){
session=HibernateUtil.getSession();
sql="from Dept where deptName=:deptname";
Query query=session.createQuery(sql);
query.setString("deptname", "SALES");
List<Dept> dlist=query.list ();
for(Dept d:dlist){
System.out.println(d.getDeptName());
}
HibernateUtil.closeSession();
}
//採用setParameter()方法進一步簡化佔位符賦值
query.setParameter("deptname", "SALES");
//批量新增引數:採用條件類setProperties()方法進一步簡化佔位符賦值,可以實現動態組合查詢。
1. 建立一個條件類,把命名引數別名作為類的私有屬性;
2. 新增一個全體屬性的建構函式;
3. setPropertiest(obj);
public void queryDept() {
session = HibernateUtil.getSession();
sql = "from Dept where deptName=:deptName";
String deptName = "SALES";
DeptCondition dc = new DeptCondition(deptName);
Query query = session.createQuery(sql);
query.setProperties (dc);
List<Dept> dlist = query.list();
for (Dept d : dlist) {
System.out.println(d.getDeptNo());
}
HibernateUtil.closeSession();
}
動態查詢
//動態查詢
public void qdept(){
DeptCondition dc=new DeptCondition();
dc.setDeptNo(new Byte("20"));
session = HibernateUtil.getSession();
StringBuffer sb = new StringBuffer("from Dept where 1=1");
//動態條件新增,一個查詢語句完成大多數查詢任務
if(dc.getDeptNo()>0){
sb.append("and deptNo>:deptNo");
}
sql=sb.toString();
Query query=session.createQuery(sql);
query.setProperties(dc);
List<Dept> dlist=query.list();
for(Dept d:dlist){
System.out.println(d.getDeptName());
}
}
//HQL中分頁查詢的實現
Query query=session.createQuery(sql);
query.setProperties(dc);
query.setFirstResult(0);
query.setMaxResults(2);
List<Dept> dlist=query.list();
//統計記錄數
public void countDept(){
session=HibernateUtil.getSession();
sql="select count(*) from Dept";
Query query=session.createQuery(sql);
int num=((Long)query.uniqueResult()).intValue();
System.out.println(num);
session.close();
}
//查詢一列
public void qOneDept(){
session=HibernateUtil.getSession();
sql="select deptNo from Dept";
Query query=session.createQuery(sql);
List<Byte> objArr= query.list();
for(Byte b:objArr){
System.out.println(b);
}
HibernateUtil.closeSession();
}
//查詢部分列—投影查詢(List
public void qSomeDept(){
session=HibernateUtil.getSession();
sql="select deptNo,deptName from Dept";
Query query=session.createQuery(sql);
List<Object[]> objArr= query.list();
for(Object[] obj:objArr){
System.out.println(obj[0]+","+obj[1]);
}
HibernateUtil.closeSession();
}
//通過迭代器查詢
public void qDeptByIt(){
session=HibernateUtil.getSession();
sql="from Dept";
Query query=session.createQuery(sql);
Iterator<Dept> it= query.iterate();
while(it.hasNext()){
Dept d=it.next();
System.out.println(d.getDeptName());
}
HibernateUtil.closeSession();
}
HQL(Hibernate Query Language)是面向物件的查詢語句
執行HQL語句可以採用兩種方式:
list()方法
iterator()方法
HQL語句中繫結引數的形式有兩種:
按引數位置繫結
按引數名字繫結
HQL支援投影查詢、引數查詢、分頁查詢等功能。