hibernate的 hql

  1. 什么是hql
    HQL是Hibernate Query Language的缩写

    查全部

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

    注1:QuerySyntaxException:book is not mapped

  3. 处理返回的结果集
    3.1 单个对象
    select没有逗号

       /**
	 * Hql语句结果集处理情况1: 单个对象
	 */
	@Test
	public void test1() {
		String hql = "from User where id=1";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object.getClass().getName());
		System.out.println(object);
	}

3.2 Object[]
b.bookId, b.bookName

    /**
	 * Hql语句结果集处理情况1: 返回数组
	 */
	@Test
	public void test4() {
		String hql = "select user_name,user_pwd from User where id=1";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(Arrays.toString((Object[]) object));

	}

3.3 Map
new Map(b.bookId as bid, b.bookName as bname)

        /**
	 * Hql语句结果集处理情况1: 返回Map
	 */
	@Test
	public void test5() {
		String hql = "select new map(user_name as name,user_pwd as pwd) from User where id=1";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object);
	}

3.4 new 构造方法(attr1,attr2)
new Book(b.bookId, b.price)

        /**
	 * Hql语句结果集处理情况1: 查询多列,返回(集合)对象
	 */
	@Test
	public void test6() {
		String hql = "select new User(user_name,user_pwd) from User where id = 1";
		Query query = sesstion.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj);
	}
  1. hql中使用占位符
    4.1 ?占位符
    从下标0开始计算位置
    hibernate5之后不再支持?占位符

4.2 :命名参数

        /**
	 * hql语句的命名参数
	 */
	@Test
	public void test7() {
		String hql = "select new User(user_name,user_pwd) from User where id in :id";
		Query query = sesstion.createQuery(hql);
		List<Integer>id=new ArrayList<>();
		id.add(1);
		id.add(2);
		query.setParameterList("id", id);
		List list = query.list();
		for (Object object : list) {
			System.out.println(object);
		}
	}
  1. 连接查询
    /**
	 * 连接查询
	 * 以订单和订单项
	 */
	@Test
	public void test8() {
		String hql = "select new map(o.orderNo as a,oi.productId as b) from Order           o,OrderItem oi where o = oi.order";
		Query query = sesstion.createQuery(hql);
		List list = query.list();
		for (Object object : list) {
			System.out.println(object);
		}
	}
  1. 聚合函数
    sum
    @Test
	public void test9() {
		String hql = "select sum(id) from User";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object);
	}

avg

    @Test
	public void test9() {
		String hql = "select avg(id) from User";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object);
	}

max

    @Test
	public void test9() {
		String hql = "select max(id) from User";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object);
	}

min

    @Test
	public void test9() {
		String hql = "select min(id) from User";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object);
	}

count

        @Test
	    public void test9() {
		String hql = "select count(*) from User";
		Query query = sesstion.createQuery(hql);
		Object object = query.getSingleResult();
		System.out.println(object);
	}
  1. hql分页
    int page = 2;// 页码:page
    int row = 10;// 每页行数:rows
    query.setFirstResult((page - 1) * row);// 设置起始记录下标
    query.setMaxResults(row);// 设置返回的最大结果集
    /**
	 * 需求:查询用户表第二页数据 每页三条 
	 */
	@Test
	public void test10() {
		String hql = "from User";
		Query query = sesstion.createQuery(hql);
		int page=1;
		int affset=3;
		query.setFirstResult((page-1)*affset);
		query.setMaxResults(affset);
		List list = query.list();
		for (Object object2 : list) {
			System.out.println(object2);
		}
	}

猜你喜欢

转载自blog.csdn.net/qq_43226824/article/details/84580802