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

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

HQL语法:http://blog.csdn.net/p_3er/article/details/9064551

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);
时间: 2024-09-19 09:30:51

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

第十一章 Hibernate的查询 Query by Criteria(QBC)

QBC(QueryByCriteria)查询方式是Hibernate提供的"更加面向对象"的一种检索方式.QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句.  1.在Hibernate应用中使用QBC查询通常经过3个步骤 (1)使用Session实例的createCriteria()方法创建Criteria对象  (2)使用工具类Restrictions的相关方法为Criteria对象设置查询对象  (3)使用Criteria对象的list()方法执行查询,返回查

第十一章 Hibernate的查询 Hibernate可以使用的查询语言

        我们在之前讲Hibernate的核心API的时候,我们知道可以通过Session对象根据实体类及id可以获取到单个数据对象.那么我们如果想像JDBC的使用一样,想通过一些特定的条件来获取我们想要的数据我们应该怎么样做呢.这就是我们今天要学习的内容--Hibernate的查询.         Session的查询相关的内容在第五章里面:http://blog.csdn.net/p_3er/article/details/8981465 Hibernate可以使用的查询语言如下几种

第十一章 Hibernate的查询 HQL面向对象的查询语言

HQL基本上与sql语句在语法上相仿,只是HQL具有面向对象的特性而已.(本文部分内容是从网络中获取而来) 1. 大小写敏感性问题          除了Java类与属性的名称外,查询语句对大小写并不敏感.所以SeLeCT与sELEct以及SELECT 是相同的,但是org.hibernate.eg.FOO并不等价于org.hibernate.eg.Foo并且foo.barSet也不等价于foo.BARSET.         本文中的HQL关键字将使用小写字母.很多用户发现使用完全大写的关键字

第十一章 Hibernate的查询 本地SQL查询

SQLQuery query = session.createSQLQuery("select * from user"); query.addEntity(User.class); List<User> list = query.list(); for(User user : list){ System.out.println(user.getId() + "--" + user.getUsername()); } 是通过hibernate.org.S

HQL: The Hibernate Query Language

Chapter 14. HQL: The Hibernate Query Language 14.1. Case Sensitivity 14.2. The from clause 14.3. Associations and joins 14.4. Forms of join syntax 14.5. Referring to identifier property 14.6. The select clause 14.7. Aggregate functions 14.8. Polymorp

Hibernate 分页 查询

 昨天的作业  分页: 主要的代码块:(明天实现分页的封装) 1 package com.cy.beans; 2 3 import java.util.List; 4 5 /** 6 * 定义一个分页对象 7 * @author acer 8 * 9 */ 10 public class Pager { 11 12 private int page;//当前页码 13 private int pageTotal;//总页码 14 private int rowsTotal;//总条数 15 pr

小结Hibernate的查询方式

1. get() and load() session.get(Clazz, id); session.load(Clazz, id); 说明: load()与get()的区别 请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception). 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库. 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该

Oracle结构化查询语言(Structured Query Language)

SQL是结构化查询语言(Structured Query Language)    专门用于数据存取.数据更新及数据库管理等操作.    此文后积累学习用SQL语句对数据库的表进行增删改查的操作.    在Oracle开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译.执行,把执行的结果返回给客户端. Oracle SQL语句由如下命令组成:   数据定义语言(DDL):包括CREATE(创建)命令.ALTER(修改)命令.DROP(删除)命令等.  数据操纵语言(DML):包括

spring-新手关于Spring管理Hibernate下查询性能的疑问

问题描述 新手关于Spring管理Hibernate下查询性能的疑问 我这么两段代码: 1.Query query = Dao.createQuery("from table"); list = query.list(); for(Table item : list){ Query query2 = Dao2.createQuery("select id from table2"); list = query2.list(); } 2.Query query = D