HQL语句查询

1.HQL语句是支持持久化对象,依赖于Query类进行HQL查询

2.Query接口通过Session对象session中生成,createQuery()方法用于执行HQL语句

 (1) Query query = session.createQuery("from User a where a.objId like ? and a.userName like ?");

  (2)Query query = session.createQuery("from User a where a.objId like : id and a.userName like : userName ");

3.Query的set()方法用来设置HQL语句中?的值或变量的值 

(1)eg.setString(int position,String  vlaue)  其中position代表 ”?” 在HQL中的位置,value为 ”?” 设置的值

  query.setInteger(0,21);

  query.setString(1,"%XiaoLiZi%");

(2)eg.setString(String paraName,String value)  其表HQL中”:”后跟变量,value代表变量的值

  query.setInteger("id",21);

  query.setString("userName","%XiaoLiZi%");

4.Query的list()方法:返回查询结果,并把查询结果转变为 List对象

     List list = query.list();

    while(int i = 0; i < list.size(); i++)

    {
       user = (User)list.get(i);
       System.out.println(user.getUserName());
     }

5.query的executeUpdate()方法用于执行更新或删除语句。

  query.executeUpdate();

6.Hibernate也支持原生Sql语句的查询

     Hibernate SQL 查询是通过 SQLQuery 接口来表示,SQLQuery接口是 Query 接口的子接口,因此完全可以调用 Query 接口的方法。

      String sql = "select a.* from User a where a.userName like '"+userName+"%'";
      Session session = this.getSession();

     //addEntity: 将SQL表的别名和实体类联系起来,确定查询结果集的形态

      SQLQuery sqlQuery = session.createSQLQuery(sql).addEntity("a",User.class);

     List list =sqlQuery. list();
     for(Object obj:new HashSet(list))

    {

        User user = (User)obj;

        System.out.println(user.getObjId()+","+user.getUserName());

      }

7.设置分页查询

 Query接口提供了用于分页显示查询结果的方法:


– setFirstResult(int firstResult):设定从哪一个对象开始检索,参数firstResult表示这个对象在查询结果中的索引位置,

     索引位置的起始值为0。默认情况下,Query接口从查询结果中的第一个对象,也就是索引位置为0的对象开始检索。
– setMaxResult(int maxResults):设定一次最多检索出的对象数目。默认情况下,Query接口检索出查询结果中所
     有的对象

     query.setFirstResult((currentPage - 1) * pageSize);  //currentPage为当前页,pageSize为每页显示的记录集数

      if(pageSize != -1)
        {
            query.setMaxResults(pageSize);
        }

posted @ 2012-03-01 10:29  西影左佐  阅读(431)  评论(0编辑  收藏  举报