HQL

1.什么是HQL?

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

2.hql如何处理返回的结果集(5种方式)

	/**
	 * 結果处理情况一:
	 * 	直接利用对象进行数据处理
	 * 	jdbc:操作的是数据库表
	 * 	hql:操作的是实体类
	 * 
	 */
	@Test
	public void testList1() {
		String hql = " from Book";
		//Query -->对应的是preparestatement(域定义对象)
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
	}
	
	/**
	 * 結果处理情况二:
	 * 	查一列 
	 * jdbc:查的是表中某列,列名不区分大小写
	 * hql:查的是实体类的某一属性 ,严格区分大小写
	 * 
	 * 
	 */
	@Test
	public void testList2() {
		String hql="select bookName from Book";
		List<String> list = session.createQuery(hql).list();
		for (String string : list) {
			System.out.println(string);
		}
	}
	
	/**
	 * 結果处理情况三:
	 * 	查多个字段,通过Object[]接收
	 * 
	 */
	@Test
	public void testList3() {
		String hql="select bookId,bookName from Book";
		List<Object[]> list = session.createQuery(hql).list();
		for (Object[] string : list) {
			System.out.println(Arrays.toString(string));
		}
	}
	
	
	/**
	 * 結果处理情况四:利用hibernate函数进行结果处理
	 * 	
	 */
	@Test
	public void testList4() {
		String hql="select new map(bookId,bookName) from Book";
		List<Map> list = session.createQuery(hql).list();
		for (Map string : list) {
			System.out.println(string);
		}
	}
	
	/**
	 * 結果处理情况五:利用构造方法进行结果处理
	 * 	1.当你给某一个类提供有参构造器,顺便加上无参构造器
	 *  2.构造方法赋值原理
	 */
	@Test
	public void testList5() {
		String hql="select new Book(bookId,bookName) from Book";
		List<Book> list = session.createQuery(hql).list();
		for (Book string : list) {
			System.out.println(string);
		}
	}

3.hql使用占位符(:XXX)

        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);

如果我们想区间查,hql又该怎么写?

String hql = " from Book where price > :min and price < :max ";

如果我们想查询多个,hql怎么写?

String hql = " from Book where bookId in (:bookIds) ";

4:分页

 query.setFirstResult((page - 1) * row);// 设置起始记录下标

query.setMaxResults(row);// 设置返回的最大结果集     

public void testList9() {
		String hql = " from Book where bookName like :bookName ";
		int rows =3;
		int page =2;
		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);
		}
	}

 

5.hql和sql区别/异同

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值