Hibernate Hql

Hql

1、  hql hibernate query language hibernate的查询语言

2、  hql是完全面向对象的查询语言,可以理解继承,多态,关联等概念

3、  hql区分大小写。但是对应sql关键字(select,from where)不区分

4、  hql基本查询:

单属性查询

@Test

   publicvoid testQuery1(){

      //查询所有书名

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //Book 大写表示的是  cn.siggy.pojo.Book

      //name表示的 Book类中的属性名

      String hql="select name from Book";

      Query query = session.createQuery(hql);

      //list()方法返回查询结果

      //返回结果的类型是根据查询的列决定的

      List<String> list = query.list();

      for(String bookname:list){

         System.out.println(bookname);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

多个属性查询

//查询多个属性

   @Test

   publicvoid testQuery2(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //Book 大写表示的是  cn.siggy.pojo.Book

      //name表示的 Book类中的属性名

      //list()方法返回查询结果

      //查询多个列时  返回结果是数组集合数组中元素的类型是由查询列来决定

      List<Object[]> list = session.createQuery("select name,price from Book").list();

      for(Object[] objs:list){

         System.out.println(objs[0]+"--"+objs[1]);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

将多个查询列封装为对象

//查询多个列时将查询结果封装为对象集合

   @Test

   publicvoid testQuery3(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //Book 大写表示的是  cn.siggy.pojo.Book

      //name表示的 Book类中的属性名

      //list()方法返回查询结果

      //查询多个列时  返回结果是数组集合数组中元素的类型是由查询列来决定

      List<Book> list = session.createQuery("select new Book(name,price) from Book").list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

别名使用

//别名的使用

   @Test

   publicvoid testQuery4(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //Book 大写表示的是  cn.siggy.pojo.Book

      //name表示的 Book类中的属性名

      //list()方法返回查询结果

      //查询多个列时  返回结果是数组集合数组中元素的类型是由查询列来决定

      List<Book> list = session.createQuery("select new Book(b.name,b.price) from Book as b").list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

查询所有列1  不使用select

//查询所有列

   @Test

   publicvoid testQuery5(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list = session.createQuery("from Book").list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

查询所有列2  使用select

//查询所有列2 不能使用 需要使用别名

   @Test

   publicvoid testQuery6(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list = session.createQuery("select b from Book b").list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

5、  hql条件查询

占位符?  从0开始

@Test

   publicvoid testQuery7(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list = session.createQuery("from Book b where id<?")

                   .setInteger(0, 4)

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

占位符?  从0开始  使用setParameter

@Test

   publicvoid testQuery8(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list = session.createQuery("from Book b where id<?")

                   .setParameter(0, 4)

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

 

命名查询

//条件查询命名查询--设置条件参数的名称  以冒号开头后更名称  设置参数时只需指定名

   @Test

   publicvoid testQuery9(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list = session.createQuery("from Book b where id<:id")

                   .setParameter("id", 4)

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

分页查询

//分页查询

   @Test

   publicvoid testQuery10(){

      //查询所有书的名称和价格

      //创建Query对象

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list = session.createQuery("from Book b")

                   .setFirstResult(3)//开始显示的记录下标(currentPage-1)*pageSize

                   .setMaxResults(3)//设置每页记录数pageSize

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

统计查询

//聚合函数--统计查询

   //结果唯一

   @Test

   publicvoid testQuery11(){

      //查询图书总数

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //int,long

      Number count = (Number)session.createQuery("select max(b.price) from Book b")

                   .uniqueResult();

      System.out.println("总数:"+count.byteValue());

      tx.commit();

      HibernateUtil.closeSession();

   }

分组查询

//分组查询

   @Test

   publicvoid testQuery12(){

      //查询图书总数

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //int,long

      List<Object[]> list = session.createQuery("select b.category.name,count(b.id) from Book b group by b.category.name")

                   .list();

      for(Object[] objs:list){

         System.out.println(objs[0]+"--"+objs[1]);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

排序

//排序

   @Test

   publicvoid testQuery13(){

      //查询图书总数

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //int,long

      List<Book> list = session.createQuery("from Book order by price desc")

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

对象导航

//对象导航--连接查询

   @Test

   publicvoid testQuery14(){

      //查询 "仙侠"的书籍信息

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      String hql="from Book b where b.category.name=:name";

      hql="select b from Book b join b.category c where c.name=:name";

      hql="select b from Book b inner join b.category c where c.name=:name";

      List<Book> list = session.createQuery(hql)

                   .setString("name", "仙侠")

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

左外链接

//左外链接

   @Test

   publicvoid testQuery15(){

      //查询 "仙侠"的书籍信息

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      String hql="select c.name,b.name from Category c left outer join c.books b";

      List<Object[]> list = session.createQuery(hql)

                   .list();

      for(Object[] objs:list){

         System.out.println(objs[0]+"----"+objs[1]);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

过滤查询

//过滤器的使用--过滤查询---为查询加上某些条件

   /* 1、定义过滤器

    * 2、使用:加条件

    * 3、在查询时候使得过滤器生效

    * */

   @Test

   publicvoid testQuery16(){

      //查询 "仙侠"的书籍信息

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      //启用过滤器

      session.enableFilter("bf").setParameter("id", 4);

      List<Book> list =session.createQuery("from Book").list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

6、  命名查询

//命名查询NamedQuery

   @Test

   publicvoid testQuery17(){

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      List<Book> list =session.getNamedQuery("getByCategoryId")

                   .setInteger("id", 3)

                   .list();

      for(Book b:list){

         System.out.println(b);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

7、  本地SQL查询

//本地查询 SQL查询

   @Test

   publicvoid testQuery18(){

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      String sql="select Name,Price from BOOK";

      List<Object[]> list =session.createSQLQuery(sql)

                   .list();

      for(Object[]  b:list){

         System.out.println(b[0]+"-"+b[1]);

      }

      tx.commit();

      HibernateUtil.closeSession();

   }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖墩有点瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值