您的位置:首页 > 其它

HQL查询

2015-12-02 20:29 260 查看
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();
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: