Hibernate学习笔记五(QBC查询)

  • 注:这是笔者在学习时的小小记录,只是为了对自己的知识查缺补漏,有可能有些地方写错,仅供参考

QBC查询

在Hibernate中为我们提供了两种方式的查询,一种是HQL查询,HQL查询需要我们自己编写类似于SQL语句的HQL,而QBC语句一般情况下是不需要写任何语句,可以依靠API来进行各种查询操作。

  • 全查操作
/**
	 * 	全查操作
	 */
	@Test 
	public void test1() {
		//获取session对象,通过自定义工具类获取,具体步骤见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/*
		 * QBC查询与HQL查询的区别:
		 * 在HQL查询中,我们需要使用到类似于SQL语句的HQL语句,大部分查询都得通过编写HQL语句来实现
		 * 在QBC查询中,不需要编写SQL语句或者HQL语句,在QBC中的查询是依靠API来查询,查询方式更加面向对象
		 */
		//全查的方式,使用session.createCriteria(持久化类的Class对象)获得Criteria对象
		//类似指定要查询哪一张表
		Criteria criteria = session.createCriteria(User.class);
		//通过criteria.list()得到数据集合
		List<User> list = criteria.list();
		//遍历输出每一条数据
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 条件查询
/*
	 * 	条件查询
	 */
	@Test
	public void test2() {
		//获取session对象,通过自定义工具类获取,具体步骤见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		//类似指定要查询哪一张表
		Criteria criteria = session.createCriteria(User.class);
		/*
		 * criteria.add(Criterion criterion)
		 * Criterion的官方解释:
		 * 一种查询条件的面向对象表示法,可在条件查询中用作限制。内置条件类型由限制工厂类提供。
		 * 这个接口可以由定义自定义限制条件的应用程序类实现。
		 * 简单来说,这个类就是用来定义我们的查询条件的,可以通过Restrictions这个条件工厂来创建不同的条件
		 * Restrictions可以创建的条件有:eq:等于;gt:大于;ge:大于等于;lt:小于le:小于等于;ne:不等于;
		 * in:包含在某个集合中;like:包含某个子字符串
		 * and:将多个条件与运算;or:将多个条件或运算,例:Restrictions.add(like("uname", "小%")).add(eq("age", "18").)
		 */
		//查询uname以小开头的数据,使用like,其他方法类似
		criteria.add(Restrictions.like("uname", "小%"));
		//通过criteria.list()得到数据集合
		List<User> list = criteria.list();
		//遍历输出每一条数据
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 分页查询
/**
	 * 分页查询
	 */
	@Test 
	public void test3() {
		//获取session对象,通过自定义工具类获取,具体步骤见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
	
		//类似指定要查询哪一张表
		Criteria criteria = session.createCriteria(User.class);
		//设置从0行开始查询
		criteria.setFirstResult(0);
		//设置每页查询2条数据
		criteria.setMaxResults(2);
		//通过criteria.list()得到数据集合
		List<User> list = criteria.list();
		//遍历输出每一条数据
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 排序查询
/**
	 * 排序查询
	 */
	@Test 
	public void test4() {
		//获取session对象,通过自定义工具类获取,具体步骤见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
	
		//类似指定要查询哪一张表
		Criteria criteria = session.createCriteria(User.class);
		//排序查询使用addOrder(Order.desc或者Order.asc)
		//通过uid降序排序
		criteria.addOrder(Order.desc("uid"));
		//通过criteria.list()得到数据集合
		List<User> list = criteria.list();
		//遍历输出每一条数据
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 聚合查询
/**
	 * 聚合查询
	 */
	@Test 
	public void test5() {
		//获取session对象,通过自定义工具类获取,具体步骤见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
	
		//类似指定要查询哪一张表
		Criteria criteria = session.createCriteria(User.class);
		/*
		 * criteria.setProjection(Projection projection)
		 * Projection的官方解释:
		 * 条件查询中查询结果集投影的面向对象表示。内置投影类型由投影工厂类提供。
		 * 这个接口可以由定义自定义投影的应用程序类实现。
		 * 简单来说,这个类就是用来定义聚合函数的,可以通过Projections这个静态工厂来得到不同的聚合函数
		 * 聚合函数有:avg:平均值,sum:总和,min:最小值,max:最大值,count:某字段不为空的记录数,rowcount:总记录数
		 */
		//获得uname字段不为空的记录数
		criteria.setProjection(Projections.count("uname"));
		//通过criteria.list()得到数据集合
		Object object = criteria.uniqueResult();
		System.out.println(object);
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值