Welcome 微信登录

首页 / 操作系统 / Linux / Hibernate的核心接口 --- Query查询详解

一 概念介绍1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句。2.HQL是Hibernate Query Language的简写,HQL采用面向对象的查询方式,HQL查询提供了更加丰富和灵活的查询特征,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装二 方法使用    Criteria的创建方式:    Criteria crit = session.createCriteria(DomainClass.class);    简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)),    criteria.add(Restrictions.eqProperty(propertyName,otherPropertyNa  me))    //分页的查询    query.setFirstResult(0);//从第0行开始    query.setMaxResults(4);//最多显示几行记录query.setString("n", name);//为占位符赋值三 代码应用    public static void query(String name) {       Session session = null;       try {           session = HibernateUtil.getSession();//定义hql语句,目的是:通过name查询所有           String queryString = "from User as user where user.name=:n";               Query query = session.createQuery(queryString);           query.setString("n", name);           //查询出所有的name相同的           List<User> list = query.list();// 得到所有的结果集           for (User u : list) {              System.out.println(u.toString());           }       } finally {           if (session != null) {              session.close();           }       }    }注:1.在定义Hql时,如果定义的语句为String queryString = "from User as user where user.name=?";在位占位符赋值的时候是:query.setString(0, name);这样会出现的问题是:如果为多个占位符赋值,可能会出错,所以用上面的方法比较保险,可读性好。2.Hql语句中的分析:(1)查询的是所有的User所对应的记录    (2)user是别名     (3)name是类中的属性名    (4)name=:n是给?起的名字,为了防止赋值的时候乱3.最重要的HQL的语句为    String queryString = "from User as user where user.name=:n";       Query query = session.createQuery(queryString);    query.setString("n", name);