hql语句的基本类容

回顾:
多对对的关系维护
级联新增
主控方的新增
被控方的新增
cascade=save-update inverse=true
结论:主控方新增时,中间表数据是会随之发生改变的
级联删除
主控方删除 是会级联删除中间表数据的
被控方删除 如果说这条数据被中间表所应用,是会报错的
1、拿到被控方数据
2、通过被控方获取到主控方数据,然后通过主控方解除关系
2、删除被控方

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

    查全部

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

    注1:QuerySyntaxException:book is not mapped

  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)

  4. hql中使用占位符
    4.1 ?占位符
    从下标0开始计算位置
    hibernate5之后不再支持?占位符

4.2 :命名参数

  1. 连接查询

  2. 聚合函数
    sum
    avg
    max
    min
    count

  3. hql分页
    int page = 2;// 页码:page
    int row = 10;// 每页行数:rows
    query.setFirstResult((page - 1) * row);// 设置起始记录下标
    query.setMaxResults(row);// 设置返回的最大结果集

主要测试代码

package com.zking.seven;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.zking.eight.dao.PageBean;
import com.zking.five.entity.Book;
import com.zking.two.util.SessionFactoryUtil;

public class HqlTest {
	private Session session;
	private Transaction beginTransaction;
	@Before
	public void before() {
		session = SessionFactoryUtil.getSession();
		beginTransaction = session.beginTransaction();
	}
	@After
	public void after() {
		beginTransaction.commit();
		session.close();
	}
	/**
	 * 返回单个对象
	 */
	@Test
	public void test1() {
		String hql="from User where id=1";
		Query query = session.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj.getClass().getName());
		System.out.println(obj);
	}
	/**
	 * 返回多个对象
	 */
	@Test
	public void test2() {
		String hql="from User";
		Query query = session.createQuery(hql);
		List list = query.list();
		for (Object object : list) {
			System.out.println(object);
		}
		
	}
	
	/**
	 * 返回字符串
	 */
	
	
	@Test
	public void test3() {
		String hql="select userName from User where id=1";
		Query query = session.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj.getClass().getName());
		System.out.println(obj);
	}
	
	/**
	 * 返回数组
	 */
	@Test
	public void test4() {
		String hql="select userName,userPwd from User where id=1";
		Query query = session.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj.getClass().getName());
		System.out.println(Arrays.toString((Object[]) obj));
	}
	/**
	 * 返回map集合
	 */
	@Test
	public void test5() {
		String hql="select new map(userName as userName,userPwd as userPwd) from User where id=1";
		Query query = session.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj.getClass().getName());
		System.out.println(obj);
	}
	
	/**
	 * 返回user对象
	 */
	@Test
	public void test6() {
		String hql="select new User(userName,userPwd) from User where id=1";
		Query query = session.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj.getClass().getName());
		System.out.println(obj);
	}
	/**hql中的命名参数
	 * query.setParameter("id", 2);
	 */
	@Test
	public void test7() {
		String hql="select new User(userName,userPwd) from User where id in :ids";
		Query query = session.createQuery(hql);
		List<Integer>ids=new ArrayList<>();
		ids.add(1);
		ids.add(2);
//		query.setParameter("id", 2);
		query.setParameterList("ids", ids);
//		Object obj = query.getSingleResult();
//		System.out.println(obj.getClass().getName());
//		System.out.println(obj);
		List list = query.list();
		for (Object object : list) {
			System.out.println(object);
		}
	}
	/**
	 * 连接查询
	 */
	@Test
	public void test8() {
		String hql="select new map(o.orderNo as a,oi.quantity as b) from Order o,OrderItem oi where o=oi.order";
		Query query = session.createQuery(hql);
		List list = query.list();
		for (Object object : list) {
			System.out.println(object);
		}
	}
	
	/**
	 * 聚合函数
	 */
	@Test
	public void test9() {
		String hql="select count(*) from User";
		Query query = session.createQuery(hql);
		Object obj = query.getSingleResult();
		System.out.println(obj.getClass().getName());
		System.out.println(obj);
	}
	
	/**
	 * 分页
	 */
	@Test
	public void test10() {
		String hql="from User";
		Query query = session.createQuery(hql);
		int page=1;
		int offset=3;
		query.setFirstResult((page-1)*offset);
		query.setMaxResults(offset);
		List list = query.list();
		for (Object object : list) {
			System.out.println(object);
		}
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值