hibernate(七)HQL(1)

HQL

HQL是Hibernate Query Language的缩写

hql和sql区别/异同
hqlsql
类名/属性表名/列名
区分大小写,关键字不区分大小写不区分大小写
别名别名
?(占位符),从下标0开始计算位置(hibernate5之后不支持)?(占位符),从顺序1开始计算位置
:命名参数不支持:命名参数
面向对象的查询语言面向结构查询语言
处理返回的结果集
1、单个对象
	/**
	 * 结果处理情况 1: Book
	 * 直接利用对象进行数据接收
	 */
	@Test
	public void testList1() {		
		String hql = "from Book";
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
		
	}

在这里插入图片描述

2、String
/**
	 * 结果处理情况 2:String
	 * 查询一列
	 * jdbc:查询的是表里面的某一列	不区分大小写
	 * hpl:查的是实体类中的某一属性	严格区分大小写
	 */
	@Test
	public void testList2() {		
		String hql = " select bookname from Book ";
//		Query query = session.createQuery(hpl);
//		List<String> list = query.getResultList();
//		System.out.println(list);	
		List<String> list = session.createQuery(hql).list();
		System.out.println(list);	
	}

在这里插入图片描述

3、Object[]
	/**
	 * 结果处理情况 3:Object[]
	 */
	@Test
	public void testList3() {		
		String hql = "select bookid,bookname from Book  ";
		List<Object[]> list = session.createQuery(hql).list();
		for (Object[] book : list) {
			System.out.println(Arrays.toString(book));
		}	
	}

在这里插入图片描述

4、Map

这里的map是hibernate内置函数

	
	/**
	 * 结果处理情况 4:利用hibernate内置函数进行结果处理
	 */
	@Test
	public void testList4() {	
		String hql = "select new map(bookid,bookname) from Book  ";
		List<Map> list = session.createQuery(hql).list();
		for (Map book : list) {
			System.out.println(book);
		}	
	}
	

在这里插入图片描述

5、构造方法

实体类提供构造方法,随便加上无参的构造器

	/**
	 * 结果处理情况 5:利用构造方法进行结果处理
	 * 1、当你给某一个类提供有参构造器,顺便加上无参构造器
	 * 2、构造方法赋值的原理(完善MVC的crud)
	 */
	@Test
	public void testList5() {	
		String hql = "select new Book(bookid,bookname) from Book  ";
		List<Book> list = session.createQuery(hql).list();
		for (Book book : list) {
			System.out.println(book);
		}	
	}

在这里插入图片描述

hql中使用占位符
	/**
	 * hql中使用占位符:
	 * jdbc:select * from Book where book_id = ?
	 * hpl:
	 * 
	 */
	@Test
	public void testList6() {	
		//一
//		String hql = "from Book where bookid = :bookid ";
//		Query query = session.createQuery(hql);
//		query.setParameter("bookid", 2);
//		Book book = (Book) query.getSingleResult();
//		System.out.println(book);
		
		//二
//		String hql = "from Book where price >  :min and price < :max ";
//		Query query = session.createQuery(hql);
//		query.setParameter("min", 10f);
//		query.setParameter("max", 30f);
//		List<Book> list = query.list();
//		for (Book book : list) {
//			System.out.println(book);
//		}
		
		//三
		String hql = "from Book where bookid in (:bookids) ";
		Query query = session.createQuery(hql);
//		new Integer[] {2,3,4}
		List<Integer> params = new ArrayList<>();
		params.add(2);
		params.add(3);
		params.add(4);
		query.setParameterList("bookids", params);
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
		
	}
聚合函数
	/**
	 * 聚合函数
	 */
		
	@Test
	public void testList8() {
		String hql = "select count(*) from Book";
		Object list = session.createQuery(hql).list();
		System.out.println(list);
	}

在这里插入图片描述

分页
		
	/**
	 * 分页
	 */
	@Test
	public void testList9() {
		String hql = "from Book where bookname like :bookname ";
		int rows = 3;// 每页行数
		int page = 1;// 页码
		Query query = session.createQuery(hql);
		query.setParameter("bookname", "%完美%");
		query.setFirstResult((page-1)*rows);// 设置起始记录下标
		query.setMaxResults(rows);// 设置返回的最大结果集 
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
	}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值