hibernate 的hql语句

1.什么是hql?

 HQL是Hibernate Query Language的缩写

2. hql和sql区别/异同

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

3. 处理返回的结果集

3.1 单个对象
      select没有逗号
  3.2 Object[]
      b.bookId, b.bookName
  3.3 Map
      new Map(b.bookId as bid, b.bookName as bname)
  3.4 new 构造方法(attr1,attr2)
      new Book(b.bookId, b.price)

以下是所有不同的返回结果 还有hql的命名参数 以及分页
 

/**
	 * hql语句处理结果1
	 * 返回对象 查询user
	 */
	@Test
	public void text1() {
		//String hql="from User where id=1";//查询单个
		String hql="from User";//查询所有
		Query createQuery = getsession.createQuery(hql);//拿到语句
		List list = createQuery.list();
		for (Object object : list) {
			System.out.println(object.getClass().getName());//输出一个对象
			System.out.println(object);//默认执行tostring
		}
//		Object obj = createQuery.getSingleResult();//得到sql查到的结果集
//		System.out.println(obj);
	}
	
	/**
	 * hql语句处理结果2
	 * 返回查的某一个是字符串 hql查询的是类和类的属性 并不是表
	 * 如果想查一个 返回的对象  定义有参构造器 也要定义无参  
	 */
	@Test
	public void text2() {
		//String hql="select username from User where id=1";
		String hql="select new User(username,userpwd) from User where id=1";//查这个用户的类属性 其他的为空 返回的是对象
		Query createQuery = getsession.createQuery(hql);//拿到语句
		Object obj = createQuery.getSingleResult();//得到sql查到的结果集
		System.out.println(obj.getClass().getName());//输出字符串
		System.out.println(obj);
	}
	
	/**
	 * hql语句处理结果3
	 * 返回查的多个是数组 hql查询的是类和类的属性 并不是表
	 */
	@Test
	public void text3() {
		String hql="select username,userpwd from User where id=1";
		Query createQuery = getsession.createQuery(hql);//拿到语句
		Object obj = createQuery.getSingleResult();//得到sql查到的结果集
		System.out.println(obj.getClass().getName());//输出数组地址
		System.out.println(Arrays.toString((Object[])obj));//obj类型转换成obj数组
	}
	
	/**
	 * hql语句处理结果4
	 * 返回查的map集合  hql查询的是类和类的属性 并不是表
	 */
	@Test
	public void text4() {
		String hql="select new map(username as username,userpwd as userpwd) from User where id=1";
		Query createQuery = getsession.createQuery(hql);//拿到语句
		Object obj = createQuery.getSingleResult();//得到sql查到的结果集
		System.out.println(obj.getClass().getName());//输出map集合java.util.HashMap
		System.out.println(obj);//map集合 键值对
	}
	
	/**
	 * 定义参数
	 * 返回查的某一个是字符串 hql查询的是类和类的属性 并不是表
	 * 如果想查一个 返回的对象  定义有参构造器 不过也要定义无参  
	 */
	@Test
	public void text5() {
		//String hql="select username from User where id=1";
		//String hql="select new User(username,userpwd) from User where id=:id";//查id命名
		String hql="select new User(username,userpwd) from User where id in:ids";//查多个命名
		//相当于sql的prestatement
		Query createQuery = getsession.createQuery(hql);//拿到语句
		List<Integer> ids=new ArrayList<>();
		ids.add(1);
		ids.add(2);
		createQuery.setParameterList("ids", ids);
		List list2 = createQuery.list();
		for (Object object : list2) {
			System.out.println(object.getClass().getName());//输出一个对象
			System.out.println(object);//默认执行tostring
		}
//		Object obj = createQuery.getSingleResult();//得到sql查到的结果集
//		System.out.println(obj.getClass().getName());//输出字符串
//		System.out.println(obj);
	}

	/**
	 * 连接查询
	 * hql查询的是类和类的属性 并不是表
	 */
	@Test
	public void text6() {
		String hql="select new map(o1.orderNo as a,o2.productId as b) from Order o1,Orderitem o2 where o1=o2.order";
		Query createQuery = getsession.createQuery(hql);//拿到语句
		List list2 = createQuery.list();
		for (Object object : list2) {//查出所有
			System.out.println(object.getClass().getName());
			System.out.println(object);//默认执行tostring
		}
	}
	
	/**
	 * 分页查询第二页 每页三条
	 */
	@Test
	public void text7() {
		//String hql="from User where id=1";//查询单个
		String hql="from User";//查询所有
		Query createQuery = getsession.createQuery(hql);//拿到语句
		int page=2;
		int offset=3;
		createQuery.setFirstResult((page-1)*offset);//拿到当前页
		createQuery.setMaxResults(offset);//拿到每页条数
		List list = createQuery.list();//查询所有
		for (Object object : list) {
			System.out.println(object.getClass().getName());//输出一个对象
			System.out.println(object);//默认执行tostring
		}
//		Object obj = createQuery.getSingleResult();//得到sql查到的结果集
//		System.out.println(obj);
	}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值