hibernate第三章:HQL查询1

来源:互联网 发布:南极人 俞兆林 知乎 编辑:程序博客网 时间:2024/05/16 08:51

什么是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();//第一步:获得sessionsession=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();//第一步:获得sessionsession=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,我会改进的。

相关的jar文件:http://download.csdn.net/detail/wiksys/4545524

源码:http://download.csdn.net/detail/wiksys/4558526

原创粉丝点击