hibernate初学6之查询方式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值