码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate查询

时间:2014-12-19 14:23:41      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

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查询

标签:

原文地址:http://www.cnblogs.com/aicpcode/p/4173741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!