hibernate初学6之查询方式

来源:互联网 发布:win10蓝屏修复软件 编辑:程序博客网 时间:2024/06/14 05:18

HQL(hibernate Query Language) —一种面向对象的查询。
HQL对关键字的大小不区分,但是对查询的对象就要区分大小写。在sql中,如果要加条件的话就是列,在HQL中,条件就是对象的属性,而且要给对象起别名。
1.hibernate 一般查询
1)限制查询起始与结果

        Query query=session.createQuery("from News");        query.setFirstResult(1);        query.setMaxResults(3);        List list=query.list();        for(int i=0;i<list.size();i++) {            News news=(News) list.get(i);            System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone());        }
2)条件查询
        Query query=session.createQuery("from News news where news.name='11'");        List list=query.list();        for(int i=0;i<list.size();i++) {            News news=(News) list.get(i);            System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone());        }

news为News对象的别名,name不是数据表中的字段,而是cus对象中的属性name
2.取表中的部分列
1)单一属性查询,集合中是对象而不是表的实例

        List names=session.createQuery("select name from News").list();        for(int i=0;i<names.size();i++) {        String  name= (String) names.get(i);        System.out.println(name);    }
2)多个属性的查询,使用对象数组
        List dept=session.createQuery("select deptno,dname from Dept").list();        for(int i=0;i<dept.size();i++) {        Object[]  object= (Object[]) dept.get(i);        System.out.println(object[0]+":"+object[1]);

这里注意,查询多个属性,其集合元素是对象数组,数组元素的类型,跟实体类的属性的类型相关。
3)多个属性的查询使用List集合存储部分列

        Query query=session.createQuery("select new list(news.name,news.phone) from News news");        List list=query.list();        for(int i=0;i<list.size();i++) {        List temp=(List) list.get(i);        System.out.println(temp.get(0)+":"+temp.get(1));    }```这种方法查询得到的结果集合中的存储是表的实例。所以temp.get0)对应news.name    4)使用Map集合存储部门列<div class="se-preview-section-delimiter"></div>

这里写代码片
“`

        Query query=session.createQuery("select new map(news.name,news.phone) from News news");        List list=query.list();        for(int i=0;i<list.size();i++) {        Map temp= (Map) list.get(i);        System.out.println(temp.get("11"));    }

这里也是表的实例,以Map的形式存储,其中的Key为数据记录中的键码

由于内连接与外连接在此处实现起来比较麻烦,所以此处不给出代码,读者有兴趣可以自行查阅资料。

3.带参数的查询
1)?作为参数

        Query query=session.createQuery("from News news where news.name=?");        query.setParameter(0, "11");        List list=query.list();        for(int i=0;i<list.size();i++) {            News news=(News) list.get(i);            System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone());        }
2)参数名称
        Query query=session.createQuery("from News news where news.name=:name");        query.setParameter("name", "11");        List list=query.list();        for(int i=0;i<list.size();i++) {            News news=(News) list.get(i);            System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone());        }
3)条件查询,使用?方式穿参
        Query query=session.createQuery("from News news where news.name LIKE ?");        query.setParameter(0, "%1%");        List list=query.list();        for(int i=0;i<list.size();i++) {            News news=(News) list.get(i);            System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone());        }
也可以使用    :参数的形式与上面极其类似,这是不再赘述

4嵌入原生sql测试

SQLQuery sqlquary=session.createSQLQuery("select * from News");        List news=sqlquary.list();        for(Iterator iter =news.iterator();iter.hasNext();) {            Object[] obj=(Object[]) iter.next();            System.out.println(obj[0]+"---------------------"+obj[1]+"------"+obj[2]);        }

这里不再是HQL了,是原生的sql语句,所以得到的查询结果对象不再是Query而是SQLQuery

原创粉丝点击