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

主要是通过 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);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值