hibernate--Hql查询语言

Hql

什么是hql?

Hibernate查询语言 hibernate query language,它是hibernate的查询语句。

hql和sql区别/异同

竟然都是查询语句那么我们来对比区别一下,注:hibernate5之后不再支持?占位符。

HQLSQL
类名,属性;关键字表名
类名,属性名都区分大小写,但是关键字不区分大小写都不区分大小写
别名别名
?,从下标0开始计算位置?,从顺序1开始计算
:命名参数不支持:命名参数
面向对象的查询语言面向结构查询语言

案例

基于此表我们创建对应实体类和Juint配合案例来理解一下。
在这里插入图片描述

Juint类

我们可在类中逐个添加方法来进行案例演示。

public class HqlTest {


    //声明
	Transaction ts=null;
	Session session=null;
	@Before
	public void setUp() throws Exception {
	    //在初始化方法里面实例化
		 session = SessionFactoryUtils.openSession();
	     ts = session.beginTransaction();
	}
	
	@After
	public void after() throws Exception {
	    //在方法执行后提交事物和session
		ts.commit();
		SessionFactoryUtils.closeSession();
	}
	}

1.查看全部的语句

//查全部
	@Test
	public void test1() {
		//查全部
	    String  hql=" from Book";
	    
	    Query query = session.createQuery(hql);
	    List<Book> list = query.list();
	    for (Book book : list) {
			System.out.println(book);
		}
	}

2.查询单个

//查单个
	@Test
	public void test2() {
		//查全部
	    String  hql=" from Book where book_name=? ";
	    Query query = session.createQuery(hql);
	    query.setString(0, "西游记");
	    List<Book> list = query.list();
	    for (Book book : list) {
			System.out.println(book);
		}
	}

3.查询单个字段

//查单个字段
	@Test
	public void test3() {
		//查全部
		//String  hql=" select bookName from Book where book_name=?";
	    String  hql=" select bookName from Book where book_name=:uname";
	    Query query = session.createQuery(hql);
	   // query.setString(0, "西游记");
	    query.setString("uname", "西游记");
	    List<String> list = query.list();
	    for (String s : list) {
			System.out.println(s);
		}
	}

4.查询多个字段

这里用于你想需要查询某些字段的值但是你不知道它的类型。

//返回object[]
		@Test
		public void test4() {
		    String  hql=" select bookName,bookId from Book where book_name=:uname";
		    Query query = session.createQuery(hql);
		    query.setString("uname", "西游记");
		    List<Object[]> list = query.list();
		    for (Object[] s : list) {
				System.out.println(Arrays.toString(s));
			}
		}

5.map查询(必须加as关键字,不然报错)

相比上面一种的话这里能够键值对应,能够直观的理解对应的键值。

//返回map(map是hibernate中的一个内置函数)
		@Test
		public void test5() {
		    String  hql=" select new Map(bookName as bookName ,bookId as bookId) from Book where book_name=:uname";
		    Query query = session.createQuery(hql);
		    query.setString("uname", "西游记");
		    List<Map> list = query.list();
		    for (Map m : list) {
				System.out.println(m);
			}
		}

6.构造方法

new 构造方法(attr1,attr2) 只有返回的结果属性有值,其他都是空的,注意:你实体类里面必须要有对应的构造函数。

//构造方法
		@Test
		public void test6() {
		    String  hql=" select new Book(bookId,bookName) from Book where book_name=:uname";
		    Query query = session.createQuery(hql);
		    query.setString("uname", "西游记");
		    List<Book> list = query.list();
		    for (Book b : list) {
				System.out.println(b);
			}
		}

7.连接查询

//连表
		@Test
		public void test7() {
		    String  hql=" select o.orderNo,oi.quantity  from Order o,OrderItem oi where o.orderId=oid";
		    Query query = session.createQuery(hql);
		    List<Object[]> list = query.list();
		    for (Object[] b : list) {
				System.out.println(Arrays.toString(b));
			}
		}

8.聚合函数
sum,avg,max, min, count

//聚合函数
		@Test
		public void test8() {
		    String  hql=" select o.orderNo,sum(oi.quantity)  from Order o,OrderItem oi where o.orderId=oid group by o.orderNo  ";
		    Query query = session.createQuery(hql);
		    List<Object[]> list = query.list();
		    for (Object[] b : list) {
				System.out.println(Arrays.toString(b));
			}
		}

9.hql分页

//假分页
		@Test
		public void test9() {
			int page=1;
			int rows=2;
			
		    String  hql=" from  Book where 1=1";
		    Query query = session.createQuery(hql);
		    //启始记录的下标
		    query.setFirstResult((page-1)*rows);
		    //返回最大结果集
		    query.setMaxResults(rows);
		    
		    List<Book> list = query.list();
		    for ( Book b : list) {
				System.out.println(b);
			}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值