`

Hiberante(八) Hql查询

 
阅读更多

常见Hql查询

	 @Test
	 public void test01(){
		 Session session =null;
		 try {
			session = HibernateUtil.openSession();
			
			/**
			 * 对于HQL而言,都是基于对象进行查询的
			 */
			Query query=session.createQuery("from Special");
			List<Special> list=query.list();
            for(Special s:list){
            	System.out.println(s.getName()+"..."+s.getType());
            }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null) session.close();
		}
		 
	 }
	 @Test
	 public void test02(){
		 Session session =null;
		 try {
			session = HibernateUtil.openSession();
			//List<Special> list=session.createQuery("select * from Special ") 不能写*
			/**
			 *  可以使用链式查询方式
			 */
			List<Special> list=session.createQuery("select spe from Special spe")
					.list();
            for(Special s:list){
            	System.out.println(s.getName()+"..."+s.getType());
            }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null) session.close();
		}
		 
	 }
	 
	 /**
	  * 
	  * @Title:  使用HQL 加条件查询 
	  * @Description:
	  * @param  
	  * @return void    返回类型 
	  * @throws
	  */
	 @Test
	 public void test03(){
		 Session session =null;
		 try {
			session=HibernateUtil.openSession();
		    List<Student> list=session.createQuery("from Student where name like '%张%' ")
		    		.list();
		    for(Student s:list){
		    	System.out.println(s.getName()+" "+s.getSex());
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null) session.close();
		}
		 
	 }
	 /**
	  * 
	  * @Title:  使用HQL 加条件查询   ? 的方式
	  * @Description:
	  * @param  
	  * @return void    返回类型 
	  * @throws
	  */
	 @Test
	 public void test04(){
		 Session session =null;
		 try {
			session=HibernateUtil.openSession();
			/**
			 * 基于?的条件的查询,特别注意:jdbc设置参数的最小下标是1,hibernate 是0
			 */
		    List<Student> list=session.createQuery("from Student where name like ? ")
		    		.setParameter(0, "%李%").list();
		    for(Student s:list){
		    	System.out.println(s.getName()+" "+s.getSex());
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null) session.close();
		}
		 
	 }
	 /**
	  * 
	  * @Title: test05 
	  * @Description: 基于别名进行查询  
	  * @param  
	  * @return void    返回类型 
	  * @throws
	  */
	 @Test
	 public void test05(){
		 Session session =null;
		 try {
			session=HibernateUtil.openSession();
			/**
			 * 基于?的条件的查询,特别注意:jdbc设置参数的最小下标是1,hibernate 是0
			 */
		    List<Student> list=session.createQuery("from Student where name like :name and sex=:sex ")
		    		.setParameter("name", "%李%")
		    		.setParameter("sex","男")
		    		.list();
		    for(Student s:list){
		    	System.out.println(s.getName()+" "+s.getSex());
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null) session.close();
		}
		 
	 }
		@Test
		public void test06() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 使用uniqueResult可以返回唯一的一个值
				 */
				Long stus = (Long)session.createQuery("select count(*) from Student where name like :name and sex=:sex")
											.setParameter("name", "%刘%")
											.setParameter("sex", "男")
											.uniqueResult();
				System.out.println(stus);
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test07() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 使用uniqueResult可以返回唯一的一个值
				 */
				Student stu = (Student)session.createQuery("select stu from Student stu where id=:id")
											.setParameter("id", 1)
											.uniqueResult();
				System.out.println(stu.getName());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test08() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 基于投影的查询,通过在列表中存储一个对象的数组
				 */
				List<Object[]> stus = session.createQuery("select stu.sex,count(*) from Student stu group by stu.sex")
											.list();
				for(Object[] obj:stus) {
					System.out.println(obj[0]+":"+obj[1]);
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test09() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 如果对象中相应的导航对象,可以直接导航完成查询
				 */
				List<Student> stus = session.createQuery("select stu from Student stu where stu.classroom.name=? and stu.name like ?")
									.setParameter(0, "计算机教育班").setParameter(1, "%张%")
									.list();
				for(Student stu:stus) {
					System.out.println(stu.getName());
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test10() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 可以使用in来设置基于列表的查询,此处的查询需要使用别名进行查询
				 * 特别注意,使用in的查询必须在其他的查询之后
				 */
				List<Student> stus = session.createQuery("select stu from Student stu where stu.name like ? and stu.classroom.id in (:clas)")
									.setParameter(0, "%张%").setParameterList("clas", new Integer[]{1,2})
									.list();
				for(Student stu:stus) {
					System.out.println(stu.getName());
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test11() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 使用setFirstResult和setMaxResult可以完成分页的offset和pageSize的设置
				 */
				List<Student> stus = session.createQuery("select stu from Student stu where stu.classroom.id in (:clas)")
									.setParameterList("clas", new Integer[]{1,2})
									.setFirstResult(0).setMaxResults(15)
									.list();
				for(Student stu:stus) {
					System.out.println(stu.getName());
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test12() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 可以通过is null来查询为空的对象,和sql一样不能使用=来查询null的对象
				 */
				List<Student> stus = session.createQuery("select stu from Student stu where stu.classroom is null")
									.setFirstResult(0).setMaxResults(15)
									.list();
				for(Student stu:stus) {
					System.out.println(stu.getName());
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test13() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 使用对象的导航可以完成连接,但是是基于Cross JOIN(全连接),效率不高,可以直接使用JOIN来完成连接
				 */
				List<Student> stus = session
						.createQuery("select stu from Student stu left join stu.classroom cla where cla.id=2")
						.setFirstResult(0).setMaxResults(15)
						.list();
				for(Student stu:stus) {
					System.out.println(stu.getName());
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test14() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
		        //基于班级进行统计每个班男女生人数
				List<Object[]> stus=session.createQuery("select c.name,s.sex,count(s.id)  from Student s right join s.classroom c  group by c.id,s.sex").list();
				for(Object[] stu:stus){
					System.out.println(stu[0]+" "+stu[1] +stu[2]);
				}
			    
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}
		
		@Test
		public void test15() {
			Session session = null;
			try {
				session = HibernateUtil.openSession();
				/**
				 * 直接可以使用new XXObject完成查询,注意,一定要加上Object的完整包名
				 * 这里使用的new XX,必须在对象中加入相应的构造函数
				 */
				List<StudentDto> stus = session
						.createQuery("select new org.th.dto.StudentDto" +
								"(stu.id as sid,stu.name as sname,stu.sex as sex,cla.name as cname,spe.name as spename) " +
								"from Student stu left join stu.classroom cla left join cla.special spe")
						.list();
				for(StudentDto stu:stus) {
					System.out.println(stu.getSid()+","+stu.getSname()+","+stu.getSex()+","+stu.getCname()+","+stu.getSpename());
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				HibernateUtil.close(session);
			}
		}

  StudentDto.java(数据传输对象)

 

/**
 * DTO对象没有存储的意义,仅仅是用来进行数据的传输的
 * @author Administrator
 *
 */
public class StudentDto {
	private int sid;
	private String sname;
	private String sex;
	private String cname;
	private String spename;
}

 

分享到:
评论

相关推荐

    hiberante查询方式使用详解

    本文将深入探讨Hibernate的四种主要查询方式:HQL(Hibernate Query Language)、SQL、QBC(Query By Example)以及存储过程的使用。 首先,HQL是Hibernate提供的面向对象的查询语言,它类似于SQL,但与对象模型更...

    Hiberante3.jar + API

    4. Query与Criteria:Query接口允许使用HQL进行查询,而Criteria接口则提供了一种类型安全的方式来进行动态查询。 三、Hibernate配置 在使用Hibernate3.jar之前,开发者需要创建一个配置文件(通常命名为hibernate...

    Hiberante3相关文档

    描述中的“Hiberante3_HQL”提示我们将会涉及到Hibernate查询语言(HQL),它是面向对象的查询语言,允许开发者以类和对象的方式查询数据库。 “Hibernate3_缓存机制”意味着这部分内容将深入探讨Hibernate如何通过...

    hiberante5.0.7安装jar包

    除了HQL,Hibernate还提供Criteria API进行动态查询,它是一种更面向对象的查询方式,可以在运行时构建查询。这对于构建复杂的、参数化的查询非常有用。 **八、事务管理** Hibernate支持自动和手动的事务管理。在...

    Hiberante中的五大核心接口.txt

    - **HQL查询**:HQL是一种面向对象的查询语言,它的语法类似于SQL,但更加面向对象。通过 `Query` 接口可以方便地执行HQL查询。 - **SQL查询**:除了HQL外,`Query` 接口还支持直接使用SQL语句进行查询。这种方式更...

    hiberante 源码 配置资料

    4. 查询机制:Hibernate Query Language (HQL) 和 Criteria API 是两种主要的查询方式。`org.hibernate.query`包下的Query接口和Criteria接口提供了丰富的查询功能,源码分析有助于理解其底层实现。 二、Hibernate...

    Struts2+Hiberante+ajax+Mysql 三级联动

    然后,通过Hibernate的Criteria或HQL(Hibernate Query Language)来查询数据,Struts2 Action处理Ajax请求并返回JSON格式的结果,Ajax在前端解析这个结果并更新下拉菜单。整个过程涉及到了前端与后端的交互、数据库...

    springmvc hiberante

    Hibernate提供了事务管理、缓存机制以及查询语言HQL,极大地提高了开发效率。 在描述中提到的"添加各种项目需要的配置",这可能包括以下几个方面: 1. 文件上传:Spring MVC支持使用Commons MultipartFile实现文件...

    hiberante有关配置说明

    HQL是面向对象的查询语言,类似SQL,但操作的是对象而不是表。Criteria API则提供了一种更面向对象的查询方式,通过构建查询条件来执行查询。 例如,使用HQL获取所有用户: ```java String hql = "from User"; ...

    hiberante5基础讲义

    HQL是一种面向对象的查询语言,类似SQL,但操作的是对象而非表格。Criteria API则提供了一种基于对象的构建查询的方式,更符合Java程序员的习惯。两者都允许执行复杂的查询,包括分页、排序和关联查询。 五、缓存...

    hiberante中文帮助文档

    7. ** Criteria 查询**:除了HQL,Hibernate还提供了Criteria API,通过构建一系列条件来执行查询,提供了一种动态构造查询的方法。 8. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存...

    Hiberante HTML 帮助文档

    接着,文档会深入讲解如何使用Hibernate进行数据操作,如CRUD(创建、读取、更新和删除)操作,包括对象的持久化、查询语言(HQL)和Criteria API的使用。同时,还将涉及事务管理,确保数据的一致性和完整性。 在HTML...

    hiberante4.2.3-part01

    3. **查询语言**:Hibernate支持两种查询方式:HQL(Hibernate Query Language)和 Criteria API。HQL是一种面向对象的查询语言,类似于SQL,但操作的是对象而不是表格。Criteria API则提供了更动态、类型安全的查询...

    疯狂Ajax讲义3+Spring+hiberante

    3. Hibernate查询语言(HQL):使用HQL进行复杂的数据库查询,与Ajax返回结果。 4. Hibernate缓存:利用Hibernate的缓存机制,提高数据访问速度,优化Ajax响应。 结合这三者,开发者能够构建出高性能、交互性强的...

    hiberante笔记

    例如,`from Account where actNo=:actNo`这条HQL语句会查询所有actNo等于指定值的Account对象。 8. 环境配置:在Eclipse等IDE中,需要导入Hibernate库文件,配置用户库,将Hibernate及其依赖库添加到项目的构建...

    hiberante annotations reference_cn

    Hibernate提供了基于Java的查询语言JPQL(Java Persistence Query Language)和HQL(Hibernate Query Language),它们类似于SQL,但操作的是对象而不是表。这两种查询语言支持复杂的查询条件、关联查询和分页等...

    Hiberante lib

    包括配置Hibernate的属性(如数据库连接信息、实体映射等),编写实体类,使用Session接口进行CRUD操作,以及利用HQL(Hibernate Query Language)或JPQL(Java Persistence Query Language)进行复杂查询。...

    黑马程序员 hibernate 2017版讲义资料-day2

    HQL支持子查询、连接查询、分组和排序等功能。Criteria API提供了一种面向对象的方式来构建查询,而Query API则是JPA的一部分,提供了更加灵活的查询方式。 最后,学习事务管理也是必不可少的,Hibernate支持编程式...

    hiberante3.2源码

    3. **查询语言 HQL**:Hibernate 提供了类似 SQL 的面向对象查询语言 Hibernate Query Language (HQL)。在 Hibernate 3.2 中,HQL 更加强大,支持更多的查询语法,如子查询、集合操作等。 4. **Criteria 查询**:...

    Hibernate查询详解

    Hibernate查询详解涵盖了多个关键知识点,包括get()和load()方法的区别、list()和iterator()方法的差异、HQL(Hibernate Query Language)与SQL的对比、HQL查询的步骤及高级特性,以及实体的删除和更新操作。...

Global site tag (gtag.js) - Google Analytics