hibernate学习-单表查询-第4天

  Hibernate 是 DAO 层技术,对数据的使用,查询是最为重要的。Hibernate 的查询技术非常强大,支持原始 SQL 语句查询,支持 QBC 查询及 Hibernate 特有的 HQL 查询。HQL,Hibernate Query Language,Hibernate 查询语言,它与 SQL 非常相似。但,HQL是面向对象的查询语言,而 SQL 是面向二维表的。HQL 查询语句中使用的是类名与属性名,
而 SQL 语句使用的是表名与字段名。QBC,Query By Criteria,标准查询,一种比 HQL 更为面向对象的查询方法。

一、API

1、Query 接口
Hibernate 进行 HQL 查询的接口,支持动态绑定参数的功能。使用 Session 对象的
createQuery 方法可获取 Query 对象。
Query query = session.createQuery(hql);
2、SQLQuery 接口
Hibernate 进行 SQL 原生查询的接口,支持动态绑定参数的功能,是 Query 接口的子接
口。使用 Session 对象的 createSQLQuery()方法可获取 SQLQuery 对象。
SQLQuery sqlQuery = session.createSQLQuery(sql);
其查询出的结果对象默认为 Object,当然,若结果为 List,则其元素为 Object。使用
SQLQuery 的 addEntity(Xxx.class)方法,可以将其结果泛型设定为指定类型。
3、Criteria 接口
Criteria,标准、准则,Hibernate 进行 Criteria 查询的接口,与 Query 接口无关。使用
Session 对象的 createCriteria()方法可获取 Criteria 对象。
Criteria criteria = session.createCriteria(Xxx.class);

二、分类查询

代码地址:https://github.com/MisterChegy/hibernate

举例:query

1、查询测试前的准备工作(在上一节中讲过)

可查看上一篇:hibernate学习-CURD-第3天

(1)定义查询的实体
下面查询举例,均是对实体类 Student 进行操作,其映射关系如下:
(2)定义主配置文件
(3)定义 Hibernate 工具类
(4)定义测试类的 setUp()
创建好测试类 MyTest 后,完成初始化方法 setUp()。
(5)准备测试数据
测试之前首先插入一些测试数据:

2、查询所有
查询所有的特点是,其查询结果为 List 集合。

public class Query_hibernate {

	private Session session;

	@Before
	public void setUp() {
		session = HbnUtils.getSession();
	}

	// 使用SQLQuery查询所有
	@Test
	public void testSQL() {
		try {
			session.beginTransaction();
			String sql = "select * from student";
			List<Student> students = session.createSQLQuery(sql).addEntity(Student.class).list();

			System.out.println(students);

			session.getTransaction().commit();
		} catch (Exception e) {

			e.printStackTrace();
			session.getTransaction().rollback();
		}
	}

	// 使用HQL查询所有
	@Test
	public void testHQL() {
		try {
			session.beginTransaction();
			String hql = "from Student order by sid desc";

			List<Student> students = session.createQuery(hql).list();

			System.out.println(students);

			session.getTransaction().commit();
		} catch (Exception e) {

			e.printStackTrace();
			session.getTransaction().rollback();
		}
	}

	// 使用HQL查询所有
	@Test
	public void testQBC() {
		try {
			session.beginTransaction();
			
			List<Student> students = session.createCriteria(Student.class)
					.addOrder(Order.desc("sid")).list();
			
			System.out.println(students);

			session.getTransaction().commit();
		} catch (Exception e) {

			e.printStackTrace();
			session.getTransaction().rollback();
		}
	}
}

分类查询:
在这里插入图片描述

学过数据库的都有共鸣,就是围绕sql语句来实现这些函数的,先有sql后有hibernate-hql。
剩下的内容请看:Hibernate5讲义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值