//查询语句:采用别名(: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<Object[]>)
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支持投影查询、参数查询、分页查询等功能。