HQL查询

  1.分页查询

     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
            NativeQuery<Student> query = session.createQuery("from Student", Student.class);
            query.setFirstResult(2);//读取数据的起始位置
            query.setMaxResults(2);//每次最多读取多少条数据
            List<Person> list = query.list();
            System.out.println(list); transaction.commit(); }
catch (Exception e) { // TODO: handle exception if (transaction!=null) { transaction.rollback(); } }

  2.排序查询

     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
       //from 持久化类 order by 成员变量属性名  asc/desc
            Query<Person> query = session.createQuery("from Person order by age desc", Person.class);
            List<Person> list = query.list();
            System.out.println(list);
            transaction.commit();
        } catch (Exception e) {
            // TODO: handle exception
            if (transaction != null) {
                transaction.rollback();
            }
        } 

  3.聚合函数查询

     //sum和count结果类型都是Long     结果类型是Long,跟所求列的类型无关
     //max和min结果类型和所求列的类型一致   结果类型跟所求的列的类型有关
     //avg结果类型是Double    跟所求的列的类型无关 
     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
            //Query<Long> query = session.createQuery("select count(*) from Person", Long.class);
            //Query<Long> query = session.createQuery("select sum(age) from Person", Long.class);
            //Query<Integer> query = session.createQuery("select max(age) from Person", Integer.class);
            //Query<Integer> query = session.createQuery("select min(age) from Person", Integer.class);
            Query<Double> query = session.createQuery("select avg(age) from Person", Double.class);
            System.out.println(query.uniqueResult());
            transaction.commit();
        } catch (Exception e) {
            // TODO: handle exception
            if (transaction != null) {
                transaction.rollback();
            }
        } 

  4.映射查询

//投影查询:
//需求:前面查询的都是查询所有列。表示扫描整个表。
//实际情况中,可能只关注表中的其中几个列,并不是所有。 如果这种情况再去扫描整个表查数据,效率低下。 
//1.查询Person类中的名称列name
     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
                        //name 是属性名
            Query<String> query = session.createQuery("select name from Person", String.class);
            System.out.println(query.list());
            transaction.commit();
        } catch (Exception e) {
            // TODO: handle exception
            if (transaction != null) {
                transaction.rollback();
            }
        }  
//2.查询Person类中的名称列name,address,查询多个列,返回结果类型是Object[]类型
     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
            Query<Object[]> query = session.createQuery("select name,sex from Person", Object[].class);
            List<Object[]> list = query.list();
            for (Object[] objects : list) {
                System.out.println(objects[0]+"--"+objects[1]);
            }
            transaction.commit();
        } catch (Exception e) {
            // TODO: handle exception
            if (transaction != null) {
                transaction.rollback();
            }
        } 
//3.查询Person类中的名称列name,address  优化:返回值是指定的实体类类型Person(必须具有对应的有参构造方法) 无参的构造方法依然要存在
     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
            Query<Person> query = session.createQuery("select new Person(name,sex) from Person", Person.class);
            List<Person> list = query.list();
            System.out.println(list);
            transaction.commit();
        } catch (Exception e) {
            // TODO: handle exception
            if (transaction != null) {
                transaction.rollback();
            }
        }

 

 

 

posted on 2017-11-22 18:15  殇灬  阅读(193)  评论(0编辑  收藏  举报