首页 > 代码库 > Hibernate查询

Hibernate查询

Hibernate查询

在Hibernate中提供了丰富的查询下面讲解一下其中的一种HQL

如果我们不知道所要寻找的对象的持久化标识(id),那么就无法通过load()和get()方法来获取持久化对象,就需要使用查询。

HQL的语法很像SQL的语法但是HQL是一种面向对象的查询语言,然而SQL的操作对象是数据表和列等数据对象,而HQL操作的对象是类,实例,属性。

HQL基础

1:HQL查询依赖于Query类,每一个Query实例对应一个查询的对象,使用HQL的步骤是:

1:获取Session对象

2:编写HQL语句

3:以HQL语句作为参数,调用Session的createQuery方法创建查询的对象。

4:如果HQL语句包含参数,调用Query的setXXX()方法为参数赋值。

5:调用Query对象的list等方法遍历查询结果。

实例代码:

    /**     * 分页     */    @Test    public void testQuery7(){        String hql = "from Person p";        Query query = session.createQuery(hql);        query.setMaxResults(10);//设置分页返回的数据条数        query.setFirstResult(0);//表示才什么位置开始获取数据,注意会忽略0,从1开始。        List<Person> personList = query.list();        for(Person p :personList){            System.out.println(p);        }    }            @Test    public void testQuery6(){        String hql = "from Person p";        Query query = session.createQuery(hql);        //如果数据只要唯一的一条,可以使用uniqueResult()方法进行操作        //但是如果有超过 1 条数据,将报异常        Person person =(Person)query.uniqueResult();        System.out.println(person);    }        @Test    public void testQuery5(){        String hql = "from Person p";        Query query = session.createQuery(hql);        //获得查询结果集中的第一条记录(其实就是List.get(0)操作)        Person person =(Person)query.list().get(0);                System.out.println(person);    }            @Test    public void testQuery4(){        //当查询需要返回的是一个对象时候可以在 hql中使用new Person(写需要获得的属性name)        //但是需要注意:在Person类中一定要有一个与hql 中写的new Person(Type...) 对应的构造器        String hql = "select new Person(p.id, p.name) from Person p";        Query query = session.createQuery(hql);        List<Person> personList = query.list();        for(Person p : personList){            System.out.println(p);        }    }        @Test    public void testQuery3(){        String hql = "select p.id, p.name from Person p";        Query query = session.createQuery(hql);        //如果查询返回的属性是多个属性,那么接收的时候list中的数据类型就是Object[]数据类型        //obj[0]  = p.id         //obj[1]  = p.name         List<Object[]> persons = query.list();        for(Object[] objs : persons){            System.out.println("id="+objs[0]+"----name"+objs[1]);        }    }        @Test    public void testQuery2(){        String hql = "select p.name from Person p";                Query query = session.createQuery(hql);        //如果查询返回的属性是单属性,那么接收的时候list中的数据类型就是属性的数据类型        List<String> personNames = query.list();                for(String name : personNames){            System.out.println(name);        }    }        @Test    public void testQuery(){        //sql: select * from t_person;        //Hql语句是基于 面向对象 的方式进行操作的        //所以在写的时候 都是 对象 和 属性        String hql = "from Person";        Query query = session.createQuery(hql);        /*List list = query.list();        for(Object o : list){            Person p = (Person)o;            System.out.println(p);        }*/                List<Person> personList = query.list();        for(Person p : personList){            System.out.println(p);        }    }

 

 

Hibernate查询