第十一章 Hibernate的查询 Query Language(官方推荐使用)

简介: <p><span style="font-family:Times New Roman,serif"><span style="font-family:Verdana,Arial,Helvetica,宋体,sans-serif; font-size:14px; line-height:25px">主要是通过 org.hibernate.Query接口的实例来使用HQL语句进行查询。</sp

主要是通过 org.hibernate.Query接口的实例来使用HQL语句进行查询。

1、简单的查询(from+实体类名称)
Query query = session.createQuery("from User");
			List<User> list = query.list(); 
			for(User user : list){
				System.out.println(user.getUsername());
			}


2、条件查询
Query query = session.createQuery("from User as u where u.id > 210");
			List<User> list = query.list(); 
			for(User user : list){
				System.out.println(user.getUsername());
			}

这里只是简单的条件查询,更多可以通过查看 hql语法进行操作。


3、预处理的HQL

使用?号来占位:

Query query = session.createQuery("from User as u where u.id > ?");
			//这里第一个参数代表的是占位符的位置,从0开始。第二个是指这个位置的值。而setXXX()方法是根据值的类型来决定的。setString()、setDouble()、setInteger()等。
			query.setInteger(0, 210);
			List<User> list = query.list(); 
			for(User user : list){
				System.out.println(user.getUsername());
			}

使用字符串(如:n)来占位:

Query query = session.createQuery("from User as u where u.id > :n");
			//基本上和和使用?号占位方式一样。注意:这里占位符的前面还有一个:号。
			query.setInteger("n", 210);
			List<User> list = query.list(); 
			for(User user : list){
				System.out.println(user.getUsername());
			}


4、根据外键作为条件查询
Query query = session.createQuery("from IdCard as idCard where idCard.person.id =15");
			List<IdCard> list = query.list(); 
			for(IdCard idCard : list){
				System.out.println(idCard.getCardNo());
			}


5、分页(重点)
Query query = session.createQuery("from User");
			query.setFirstResult(0); //从哪条记录开始
			query.setMaxResults(5);  //取多少条记录
			List<User> list = query.list(); 
			for(User user : list){
				System.out.println(user.getUsername());
			}

//具体:
		Query query = session.createQuery(hql);
		
		Query q = session.createQuery("select count(*) from Person");
		Long count = (Long) q.uniqueResult();
		
		
		int pageSize = 5;  //每一页的记录数
		Long totalPages = count/pageSize; //一共有多少页
		if(count%pageSize != 0){
			totalPages += 1;
		}
		System.out.println(totalPages);
		int page = 3;  //查询是的第几页
		query.setFirstResult((page - 1)*pageSize);
		query.setMaxResults(pageSize);

		List<Person> list = query.list();
		for(Person p : list){
			System.out.println(p.getId()+"--"+p.getName());
		}


6、uniqueResult

查询记录只有一条的时候使用。

Query query = session.createQuery("select count(*)from User");
			Long count = (Long) query.uniqueResult();
			System.out.println(count);



目录
相关文章
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
99 0
|
3月前
|
SQL Java 数据库连接
|
3月前
|
缓存 Java 数据库连接
什么是 Hibernate 查询语言或 HQL?
【8月更文挑战第21天】
108 0
|
3月前
|
SQL Java 数据库连接
在 Hibernate 中何时使用条件查询?
【8月更文挑战第21天】
39 0
|
3月前
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
35 0
|
3月前
|
SQL 安全 Java
|
6月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
|
6月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
8天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
9 1
|
3月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
46 1