常见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; }
相关推荐
本文将深入探讨Hibernate的四种主要查询方式:HQL(Hibernate Query Language)、SQL、QBC(Query By Example)以及存储过程的使用。 首先,HQL是Hibernate提供的面向对象的查询语言,它类似于SQL,但与对象模型更...
4. Query与Criteria:Query接口允许使用HQL进行查询,而Criteria接口则提供了一种类型安全的方式来进行动态查询。 三、Hibernate配置 在使用Hibernate3.jar之前,开发者需要创建一个配置文件(通常命名为hibernate...
描述中的“Hiberante3_HQL”提示我们将会涉及到Hibernate查询语言(HQL),它是面向对象的查询语言,允许开发者以类和对象的方式查询数据库。 “Hibernate3_缓存机制”意味着这部分内容将深入探讨Hibernate如何通过...
除了HQL,Hibernate还提供Criteria API进行动态查询,它是一种更面向对象的查询方式,可以在运行时构建查询。这对于构建复杂的、参数化的查询非常有用。 **八、事务管理** Hibernate支持自动和手动的事务管理。在...
- **HQL查询**:HQL是一种面向对象的查询语言,它的语法类似于SQL,但更加面向对象。通过 `Query` 接口可以方便地执行HQL查询。 - **SQL查询**:除了HQL外,`Query` 接口还支持直接使用SQL语句进行查询。这种方式更...
4. 查询机制:Hibernate Query Language (HQL) 和 Criteria API 是两种主要的查询方式。`org.hibernate.query`包下的Query接口和Criteria接口提供了丰富的查询功能,源码分析有助于理解其底层实现。 二、Hibernate...
然后,通过Hibernate的Criteria或HQL(Hibernate Query Language)来查询数据,Struts2 Action处理Ajax请求并返回JSON格式的结果,Ajax在前端解析这个结果并更新下拉菜单。整个过程涉及到了前端与后端的交互、数据库...
Hibernate提供了事务管理、缓存机制以及查询语言HQL,极大地提高了开发效率。 在描述中提到的"添加各种项目需要的配置",这可能包括以下几个方面: 1. 文件上传:Spring MVC支持使用Commons MultipartFile实现文件...
HQL是面向对象的查询语言,类似SQL,但操作的是对象而不是表。Criteria API则提供了一种更面向对象的查询方式,通过构建查询条件来执行查询。 例如,使用HQL获取所有用户: ```java String hql = "from User"; ...
HQL是一种面向对象的查询语言,类似SQL,但操作的是对象而非表格。Criteria API则提供了一种基于对象的构建查询的方式,更符合Java程序员的习惯。两者都允许执行复杂的查询,包括分页、排序和关联查询。 五、缓存...
7. ** Criteria 查询**:除了HQL,Hibernate还提供了Criteria API,通过构建一系列条件来执行查询,提供了一种动态构造查询的方法。 8. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存...
接着,文档会深入讲解如何使用Hibernate进行数据操作,如CRUD(创建、读取、更新和删除)操作,包括对象的持久化、查询语言(HQL)和Criteria API的使用。同时,还将涉及事务管理,确保数据的一致性和完整性。 在HTML...
3. **查询语言**:Hibernate支持两种查询方式:HQL(Hibernate Query Language)和 Criteria API。HQL是一种面向对象的查询语言,类似于SQL,但操作的是对象而不是表格。Criteria API则提供了更动态、类型安全的查询...
3. Hibernate查询语言(HQL):使用HQL进行复杂的数据库查询,与Ajax返回结果。 4. Hibernate缓存:利用Hibernate的缓存机制,提高数据访问速度,优化Ajax响应。 结合这三者,开发者能够构建出高性能、交互性强的...
例如,`from Account where actNo=:actNo`这条HQL语句会查询所有actNo等于指定值的Account对象。 8. 环境配置:在Eclipse等IDE中,需要导入Hibernate库文件,配置用户库,将Hibernate及其依赖库添加到项目的构建...
Hibernate提供了基于Java的查询语言JPQL(Java Persistence Query Language)和HQL(Hibernate Query Language),它们类似于SQL,但操作的是对象而不是表。这两种查询语言支持复杂的查询条件、关联查询和分页等...
包括配置Hibernate的属性(如数据库连接信息、实体映射等),编写实体类,使用Session接口进行CRUD操作,以及利用HQL(Hibernate Query Language)或JPQL(Java Persistence Query Language)进行复杂查询。...
HQL支持子查询、连接查询、分组和排序等功能。Criteria API提供了一种面向对象的方式来构建查询,而Query API则是JPA的一部分,提供了更加灵活的查询方式。 最后,学习事务管理也是必不可少的,Hibernate支持编程式...
3. **查询语言 HQL**:Hibernate 提供了类似 SQL 的面向对象查询语言 Hibernate Query Language (HQL)。在 Hibernate 3.2 中,HQL 更加强大,支持更多的查询语法,如子查询、集合操作等。 4. **Criteria 查询**:...
Hibernate查询详解涵盖了多个关键知识点,包括get()和load()方法的区别、list()和iterator()方法的差异、HQL(Hibernate Query Language)与SQL的对比、HQL查询的步骤及高级特性,以及实体的删除和更新操作。...