什么是HQL?
为什么使用HQL?
如何使用HQL?
使用实体查询
属性查询
参数绑定
HQL中的聚合函数
排序
分组
分页
什么是HQL?
是hibernate支持的两种主要查询之一:HQL(Hibernate Query Language , Hibernate查询语言) 。是一种面向对象的查询语句,没有表,字段的概念,只有类,对象和属性的概念。
为什么使用HQL?
想到之前,我们使用JDBC时,我们的查询是什么样子的?
private Connection conn;
private PreparedStatement pst;
private ResultSet rs;
public List findLikeTitle(String title){
List list = new ArrayList();
String sql="select * from Books b where lower(b.title) like lower(?) order by pubdate desc";
try {
conn = DBUtil.getConn();
pst=conn.prepareStatement(sql);
pst.setString(1, "%"+title+"%");
rs=pst.executeQuery();
Book book=null;
while(rs.next()){
book=new Book();
book.setId(rs.getLong("id"));
book.setIsbn(rs.getString("ISBN"));
book.setPrice(rs.getDouble("price"));
book.setPubdate(rs.getDate("pubdate"));
book.setTitle(rs.getString("title"));
list.add(book);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtil.close(conn, pst, rs);
}
return list;
}
复杂的SQL语句,繁复的包装对象放在集合中,代码繁琐,容易出错。
HQL提供了一种面向对象的查询语句,更加灵活,功能强大。首选。
语法:
[select/update/delete….]from Entity [where…] [group by…] [having…][order by…]
如何使用HQL?
分为四个步骤:
·得到session
·编写HQL语句
·创建Query对象
·执行查询,返回结果
package org.wiksys;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
SessionFactory sf=null;
Session session=null;
try {
sf=new Configuration().configure().buildSessionFactory();
//第一步:获得session
session=sf.openSession();
//第二步:编写HQL语句,语法可以知道,Select可以写也可以不写
//这里就先不写,要是不习惯的可以写上
String hql="from Student";
//第三步:创建Query对象
Query query=session.createQuery(hql);
//第四部:执行查询,并返回结果。
List list=query.list();
System.out.println(list.size());
} catch (HibernateException e) {
e.printStackTrace();
} finally {
session.close();
sf.close();
}
}
}
通过上面的HQL查询,我们可以看到是多么的简单。
使用实体查询
向上面的“from Student”就相当于SQL语句“select * from Student”;
由于是面向对象,就存在继承关系,或许Student类存在多个子类,那么我们这里所使用的“from Student”可以查出所有子类的记录数,即使他不在一张表中。
Where子句:可以根据条件查询。
Like子句用于比较字符串。
属性查询:也就是在select后添加要查询的属性,然后再查询,其实和SQL没多大差距
package org.wiksys;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
SessionFactory sf=null;
Session session=null;
try {
sf=new Configuration().configure().buildSessionFactory();
//第一步:获得session
session=sf.openSession();
//第二步:编写HQL语句,语法可以知道,Select可以写也可以不写
//这里就先不写,要是不习惯的可以写上
String hql="select id from Student";
//第三步:创建Query对象
Query query=session.createQuery(hql);
//第四部:执行查询,并返回结果。
List list=query.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println(list.size());
} catch (HibernateException e) {
e.printStackTrace();
} finally {
session.close();
sf.close();
}
}
}
篇幅问题,我们分为两章来阐述,有什么做的不好的地方,给我留言,或是联系我的QQ:386011356,我会改进的。