Hibernate HQL 单表查询

本文介绍HQL(Hibernate Query Language)的基础用法,包括单表查询、带属性查询、构造函数查询、条件查询及子查询等场景,并对比了不同查询方式的结果差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hql语句分三种情况考虑:

               单表;

               一对多 & 多对多;

               多表结合


需求:查询所有班级信息

			public class HQLDao extends HiberanteUtils{
				/**
				 * 单表
				 */
				public List<Classes> queryAllClasses(){
					Session session = sessionFactory.openSession();
					List<Classes> cList = session.createQuery("from Classes").list();	//HQL 语句
					session.close();
					return cList;
				}
				
				// 工厂模式
				public  static  HQLDao  getInstance(){
					return  new  HQLDao();
				}
			}

结果:cname的值列表    description的值列表

=======================================================

需求:带属性的查询

			public List queryClasses_Properties(){
				Session session = sessionFactory.openSession();
				List cList = session.createQuery("select cid, cname from Classes").list();	// 带属性cid, cname的查询
				session.close();
				return cList;
			}

上面两个查询的结论:带 select 的查询和不带select 的查询结果完全不同。

           带select的:查出来的是“对象”;
           不带 select 的:查出来的是“数组”。




========================================================

需求:希望在 List 中包含有 JavaBean 的形式的查询

      在HQLDao.java 中

			public  List<Classes>  queryClasses_Constructor(){
				Session session = sessionFactory.openSession();
				List<Classes> cList = session.createQuery("select  new  cn.google.hiberate.sh.domain.Classes(cname, description)  from Classes").list();
				session.close();
				return cList;
			}
       必要条件: 在 Classes.java 中添加带参数的构造函数
			public  Classes(String  cname, String description){
				this.cname = cname;
				this.description = description;
			}

======================================================

需求:按条件查询班级,where id= ?

			public Classes queryClasses_Condition(){
				Session session = sessionFactory.openSession();
				Query query = session.createQuery("select new cn.google.hiberate.sh.domain.Classes(cname,description) from Classes where cid=:cid");
				query.setLong("cid", 1L);
				Classes classes = (Classes)query.uniqueResult();	//返回唯一的结果集
				System.out.println(classes.getCname());
				session.close();
				return classes;
			}

==========================================

需求:查询 cid=1,2,3 的班级

			public void queryClasses_SubSelect(){
				Session session = sessionFactory.openSession();
				List<Classes> cList = session.createQuery("from  Classes  where  cid  in(select cid  from Classes where  cid  in(1,2,3))").list();
				session.close();
			}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值