Hibernate(5.3.7)检索方式

本文详细介绍了Hibernate 5.3.7的各种检索方式,包括导航对象图检索、OID检索、重点讲解的HQL检索(如别名设置、单个对象获取、投影查询、排序、分页及条件检索等)以及QBC和本地SQL检索。对于想要深入理解Hibernate查询的开发者具有参考价值。
摘要由CSDN通过智能技术生成

1、导航对象图检索方式

根据已经加载的对象,导航到其他对象,利用类与类之间的关系来检索对象。
例如:

Order order = (Order) session.get(Order.class,1);
Customer customer = order.getCustomer;

2、OID检索

指使用Session的get()和load()方法加载某条记录对应的对象。

Customer customer = (Customer) session.get(Customer.class,1);
Customer customer = (Customer) session.load(Customer.class,1);

3、HQL检索(重点)

特性:
面向对象的查询语言,与SQL类似,使用类、对象、属性的概念。官方推荐。
具有如下功能:
	 - 在查询语句中设定各种查询条件。
	 - 支持投影查询,仅检索对象的部分属性。
	 - 支持分页查询
	 - 支持分组查询,允许使用group by和having关键字。
	 - 提供内置聚集函数,如:sum()、min()和max()。
	 - 能够调用用户定义的SQL函数。
	 - 支持子查询,即嵌套查询。
	 - 支持动态绑定参数。

A:指定别名

/**
	 * 指定别名查询(就是另外给POJO类取个名字,例如:c)
	 */
	@Test
	public void testQuery1() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select c from Customer c";
		//创建Query对象
		//Query<Customer> query = session.createQuery(hql,Customer.class);
		//执行查询,获得结果
		List<Customer> cList = session.createQuery(hql,Customer.class).list();
		//遍历
		for (Customer c : cList) {
			System.out.println(c.getId()+":"+c.getName());
		}
		//关闭事务
		trans.commit();
		session.close();	
	}

B:检索单个对象

/**
	 * 查询单个的对象
	 */
	@Test
	public void testQuery2() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "from Customer c where c.id=6";
		//创建Query对象
		Query<Customer> query = session.createQuery(hql,Customer.class);
		//查询获得结果
		Customer customer = (Customer) query.uniqueResult();
		System.out.println(customer.getId()+":"+customer.getName());
		
		//关闭事务
		trans.commit();
		session.close();
	}

C:投影查询(查询单独一个字段信息)

/**
	 * 投影查询:即查询部分字段信息(一个)
	 */
	@Test
	public void testQuery3() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select c.name from Customer c";
		//创建Query对象
		Query<String> query = session.createQuery(hql,String.class);
		List<String> list =	query.list();
		for (String string : list) {
			System.out.println(string);
		}
		//提交事务
		trans.commit();
		session.close();
	}

D:投影查询(查询多个字段信息)

/**
	 * 投影查询:即查询部分字段信息(多个)
	 */
	@Test
	public void testQuery4() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select c.id,c.name from Customer c";
		//创建Query对象
		Query<Object[]> query = session.createQuery(hql,Object[].class);
		List<Object[]> list =	query.list();
		for (Object[] s : list) {
			System.out.println(s[0]+":"+s[1]);
		}
		
		//提交事务
		trans.commit();
		session.close();	
	}

E:投影查询(查询多个字段信息且面向对象)

/**
	 * 投影查询:即查询部分字段信息(多个)且面向对象查询
	 * PS:POJO类要有和Customer(id,name)对应的构造函数
	 */
	@Test
	public void testQuery5() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select new Customer(id,name) from Customer";
		//创建Query对象
		Query<Customer> query = session.createQuery(hql,Customer.class);
		List<Customer> list = query.list();
		for (Customer c : list) {
			System.out.println(c.getId()+":"+c.getName());
		}
		
		//提交事务
		trans.commit();
		session.close();	
	}

F:检索排序

/**
	 * 排序检索(order标志排序)
	 */
	@Test
	public void testQuery6() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句(order标志排序,desc倒序)
		String hql = "from Customer order by id desc";
		Query<Customer> query = session.createQuery(hql,Customer.class);
		List<Customer> list = query.list();
		
		for (Customer c : list) {
			System.out.println(c.getId()+":"+c.getName());
		}		
		//提交事务
		trans.commit();
		session.close();
	} 

G:分页检索

/**
	 * 分页检索
	 */
	@Test
	public void testQuery7() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "from Customer";
		//创建Query对象
		Query<Customer> query = session.createQuery(hql,Customer.class);
		//设置起始下标
		query.setFirstResult(0);
		//设置每页显示条数
		query.setMaxResults(5);
		//集合接收
		List<Customer> list = query.list();
		for (Customer c : list) {
			System.out.println(c.getId()+":"+c.getName());
		}
		//提交事务
		trans.commit();
		session.close();
	}

H:条件检索(按参数位置)

/**
	 * 条件检索:按参数位置查询
	 * 需要使用JPA-style(?0..)
	 * 可以使用通配符%%
	 */
	@Test
	public void testQuery8() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "from Customer where name=?0 and id=?1";
		//创建Query对象
		Query<Customer> query = session.createQuery(hql,Customer.class);
		//给HQL语句中的占位符代表的参数赋值
		//query.setParameter(0,"陈飞%");
		query.setParameter(0,"万星月").setParameter(1,3);
		//返回结果
		Customer c = query.getSingleResult();
		System.out.println(c.getId()+":"+c.getName());
//		List<Customer> list = query.list();
//		for (Customer c : list) {
//			System.out.println(c.getId()+":"+c.getName());
//		}
		
		//提交事务
		trans.commit();
		session.close();
	}

I:条件检索(按参数名)

/**
	 * 条件检索:按参数名字查询
	 */
	@Test
	public void testQuery9() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "from Customer where id=:id";
		//创建Query对象
		Query<Customer> query = session.createQuery(hql,Customer.class);
		//添加参数
		query.setParameter("id",5);
		//执行查询,返回结果
		List<Customer> list = query.list();
		for (Customer c : list) {
			System.out.println(c.getId()+":"+c.getName());
		}
		
		//提交事务
		trans.commit();
		session.close();
	}

J:聚合函数

/**
	 * 聚合函数:求总记录数量
	 */
	@Test
	public void testFunction1() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select count(id) from Customer";
		//创建Query对象
		Query<Long> query = session.createQuery(hql,Long.class);
		Long result = query.uniqueResult();
		
		System.out.println(result);
		//提交事务
		trans.commit();
		session.close();	
	}
	
	/**
	 * 聚合函数:求最大值
	 */
	@Test
	public void testFunction2() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select max(id) from Customer";
		//创建Query对象
		Query<Integer> query = session.createQuery(hql,Integer.class);
		Integer result = query.uniqueResult();
		
		System.out.println(result);
		//提交事务
		trans.commit();
		session.close();	
	}
	
	
	/**
	 * 聚合函数:求最小值
	 */
	@Test
	public void testFunction3() {
		//获得session对象
		Session session = getSession();
		//通过session开启事务
		Transaction trans = session.beginTransaction();
		
		//HQL语句
		String hql = "select min(id) from Customer";
		//创建Query对象
		Query<Integer> query = session.createQuery(hql,Integer.class);
		Integer result = query.uniqueResult();
		
		System.out.println(result);
		//提交事务
		trans.commit();
		session.close();	
	}

4、QBC检索

这里就不介绍了,如果需要,请点击链接:万星明的Hibernate

5、本地SQL检索

即:直接使用SQL语句进行检索查询:

SQLQuery sqlQuery = session.createSQLQuery("select id,name,age,city from customer");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值