阅读89 返回首页    go 阿里云 go 技术社区[云栖]


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

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

HQL语法:https://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);



最后更新:2017-04-03 18:52:11

  上一篇:go 上传或下载当文件名包含有特殊字符&quot;#&quot;的处理
  下一篇:go 第十章 基于Annotation的关系映射 多对多