hibernate1

1.什么是hql

HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。

2. hql和sql区别/异同 

 

3. 处理返回的结果集

3.1返回单个对象

/**
     * hql语句结果集处理情况1
     * 返回单个对象
     */
    public static void test1(){
   Session session = SessionFactoryUtils.openSession();
   Transaction transaction = session.beginTransaction();
        String hql="from Student where sid=1";
        Query query = session.createQuery(hql);
        Object obj = query.getSingleResult();
        System.out.println(obj.getClass().getName());
        System.out.println(obj);
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }

3.1.2返回多个对象

/**
     * hql语句结果集处理情况1
     * 返回多个对象  注意数据库字段不能为null
     */
    public static void test2(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="from Student";
        Query query = session.createQuery(hql);
        List list=query.list();
        for (Object o : list) {
            System.out.println(o);
        }
        transaction.commit();
        SessionFactoryUtils.closeSession();

}

3.2返回字符串


/**
     * hql语句结果集处理情况2
     * 返回字符串
     */
    public static void test3(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="select sname from Student where sid=1";
        Query query = session.createQuery(hql);
        Object obj=query.getSingleResult();
        System.out.println(obj);
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }
3.3返回数组


/**
     * hql语句结果集处理情况3
     * 返回数组
     */
    public static void test4(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="select sid,sname,version from Student where sid=1";
        Query query = session.createQuery(hql);
        Object obj=query.getSingleResult();
        System.out.println(Arrays.toString((Object[])obj));
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }
3.4返回Map

 /**
     * hql语句结果集处理情况4
     * 返回Map
     */
    public static void test5(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="select new map(sid as sid,sname as sname,version as version) from Student where sid=1";
        Query query = session.createQuery(hql);
        Object obj=query.getSingleResult();
        System.out.println(obj);
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }
3.5查询多列返回对象(注意对象的构造方法)

/**
     * hql语句结果集处理情况5
     * 查询多列返回对象
     */
    public static void test6(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="select new Student (sid,sname)from Student where sid=1";
        Query query = session.createQuery(hql);
        Object obj=query.getSingleResult();
        System.out.println(obj.getClass().getName());
        System.out.println(obj);
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }

4. hql中使用占位符

 4.1 ?占位符

从下标0开始计算位置hibernate5之后不再支持?占位符所以不为大家介绍了

4.2 :命名参数


/**
     * hql命名参数
     */
    public static void test7(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="from Student where sid in :ids";
        Query query = session.createQuery(hql);
        //这里使用 query.setParameter(0,1)报错
      // query.setParameter("id",1);//这个是传单个参数
        // 如果使用in的话
        List ids=new ArrayList();
        ids.add(1);
        ids.add(2);
        query.setParameterList("ids",ids);
        Object obj = query.getSingleResult();
        System.out.println(obj.getClass().getName());
        System.out.println(obj);
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }

5.连接查询

public static void test8(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
       String hql="select new map(oi.order_item_id,o.order_id)  from  Order o,OrderItem oi where o.order_id=oi.oid ";
        Query query = session.createQuery(hql);
        List list=query.list();
        for (Object o : list) {
            System.out.println(o);
        }
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }

6. 聚合函数

这里就给大家使用一个count()函数其余的sum,avg,min,max用法都一样


/**
     * 聚合函数
     */
    public static  void test9(){
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql="select count(sid)from Student ";
        Query query = session.createQuery(hql);
        Object singleResult = query.getSingleResult();
        System.out.println(singleResult);
        transaction.commit();
        SessionFactoryUtils.closeSession();
    }
7.hql分页

 /**
     * hql分页
     * 查询第二页每页三条
     */
    public static void test10() {
        Session session = SessionFactoryUtils.openSession();
        Transaction transaction = session.beginTransaction();
        String hql = "from Book ";
        Query query = session.createQuery(hql);
        int page = 2;
        int offeset = 3;
        query.setFirstResult(page * offeset);
        query.setMaxResults((page - 1) * offeset);
        List list = query.list();
        for (Object o : list) {
            System.out.println(o);
        }
        transaction.commit();
        SessionFactoryUtils.closeSession();

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值