hibernate hql 查询返回结果类型

hql和sql区别/异同
HQL ————————————SQL
类名/属性 ————————— 表名/列名
区分大小写,关键字不区分大小写———— 不区分大小写
别名————————————————别名
?,从下标0开始计算位置(hibernate5之后不支持) ?,从顺序1开始计算位置
:命名参数———————————— 不支持:命名参数
面向对象的查询语言—————————— 面向结构查询语言

演示:

/**
	 * 一、结果  返回对象
	 * 查询所有
	 */
	@Test
	public void testList1() {
		String hql = "from Book";
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		list.forEach(System.out::println);
	}
	
	/**
	 * 二、查询数据库表中的一列
	 * sql:在数据库表中查询,不区分大小写
	 * hql:由于查询的是实体类的属性,区分大小写
	 */
	@Test
	public void testList2() {
	       String hql = "select bookName from Book";
	       List<String> list = session.createQuery(hql).list();
	       list.forEach(System.out::println);
	}
	
	
	/**
	 * Object[]
	 * 三、如果不是查询一张表  最好使用map
	 */
	@Test
	public void testList3() {
		String hql = "select bookId,bookName from Book";
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		list.forEach(System.out::println);
	}
	
	/**
	 * 四、通过hibernate函数Map去处理
	 * 函数不区分大小写
	 */
	@Test
	public void testList4() {
		String hql = "select new map(bookId,bookName) from Book";
		Query query = session.createQuery(hql);
		List<Map> list = query.list();
		list.forEach(System.out::println);
		
	}
	
	/**
	 * 五、通过构造方法查询
	 * 
	 * 注意:新建了一个有参的构造方法,默认的无参构造方法就没有了
	 * 需要补一个无参的构造方法
	 */
	@Test
	public void testList5() {
		String hql = "select new Book(bookId,bookName) from Book";
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		list.forEach(System.out::println);
	}
	
	/**
	 * 六、hql占位符
	 * 5版本之后不用"?"
	 */
	
	@Test
	public void testList6() {
	    String hql = "from Book where bookId = :bookId";
	    Query query = session.createQuery(hql);
	    query.setParameter("bookId", 1);
	    Book book = (Book) query.getSingleResult();
	    System.out.println(book);
	    
	}
	
	/**
	 * 连表查询
	 */
	@Test
	public void testList7() {
	     String hql = "select o.orderNo,oi.productId from Order o,OrderItem oi where o.orderId = oi.order.orderId";	
         List<Object[]> list = session.createQuery(hql).list();
         list.forEach(System.out::println);
	}
	
	/**
	 * 聚合函数
	 */
	@Test
	public void testList8() {
	       String hql ="select count(*) from Book ";
		   Long count = (Long) session.createQuery(hql).getSingleResult();
		   System.out.println("count:"+count);
	}
	
	
	/**
	 * 分页
	 */
	@Test
     public void testList9() {	
		String hql="from Book";
    	 Query query = session.createQuery(hql);
    	 int page=2;
    	 int ofset = 3;
    	 query.setFirstResult((page-1)*ofset);//起始下标
    	 query.setMaxResults(ofset);
    	 List<Book> list = query.list();
    	 list.forEach(System.out::println);
     }
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值