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);
        }
    }

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。