1.概述:HOL看上去很像SQL,但不要被语法结构所迷惑,HQL被有意识的设计为完全面向对象的查询。
2.from子句:
Query query = session.createQuery("from Dept");
List<Dept> list = query.list();
for(Dept d:list){
System.out.println(d.getDname());
}
3.select子句:
Query q = session.createQuery("select pname,price from Product");
List<Object[]> list = q.list(); for(Object[] o : list){
System.out.println(o[0]+" "+o[1]);
}
//注意:
//1.HQL中,select子句执行后返回的是Object[]类型
//2.用的createSQLQuery返回值定义为list<Object[]>
//由于sql的特殊原因 可能返回值的数组里面 list.get(i)的长度不固定,
//可能是1或者更多,当是1的时候系统就不认定它是一个Object[] 而是一个String所以会报这样一个错java.lang.String cannot be cast to[Ljava.lang.Object
4.where子句:
//Query q = session.createQuery("from Product where price>3000");
//Query q = session.createQuery("from Product where pname='iphone5'");
//Query q = session.createQuery("from Product where price between 2000 and 3000");
//Query q = session.createQuery("from Product where price>=2000 and price<=3000");
// Query q = session.createQuery("from Product where upper(remark)=remark");
//
// List<Product> list = q.list();
// for(Product p : list){
// System.out.println(p.getPname()+" "+p.getPrice());
// }
//预编译
//Query q = session.createQuery("from Product where price>?");
//q.setDouble(0, 2000);
// Query q = session.createQuery("from Product where pname like ?");
// q.setString(0, "%5%");
// List<Product> list = q.list();
// for(Product p : list){
// System.out.println(p.getPname()+" "+p.getPrice());
// }
5.其它字句
//order by排序
// Query q = session.createQuery("from Product order by price desc");
// List<Product> list = q.list();
// for(Product p : list){
// System.out.println(p.getPname()+" "+p.getPrice());
// }
//分组函数
// Query q = session.createQuery("select remark,count(*) from Product group by remark");
// List<Object[]> list = q.list();
// for(Object[] o : list){
// System.out.println(o[0]+" "+o[1]);
// }
//连接查询
// Query q = session.createQuery("select a.ename,b.dname from Emp a,Dept b where a.deptno=b.deptno");
// List<Object[]> list = q.list();
// for(Object[] o : list){
// System.out.println(o[0]+" "+o[1]);
// }
// Query q = session.createQuery("from Emp where sal>(select avg(sal) from Emp)");
// List<Emp> list = q.list();
// for(Emp e : list){
// System.out.println(e.getEname()+" "+e.getJob()+" "+e.getSal());
// }
//
注意:在HQL中,除了针对JAVA类的类名方法之外,大小写不敏感