-----------------------Query的list()方法
(1)查询结果为Object对象集合
List li=this.getSession().createQuery("from TEmp").list();
main()方法里:
List li=dao.getAllEmp();
for(int i=0;i<li.size();i++){
TEmp emp=(TEmp)li.get(i);
System.out.println(emp.getEId()+" "+emp.getEName()+" "+emp.getESex());
}
(2)查询结果为Object对象组成的数组(投影查询)
List li=this.getSession().createQuery("select a.EId,a.EName,a.ESex from TEmp as a").list();
main()方法里
List li=dao.getAllEmp();
for(int i=0;i<li.size();i++){
Object[] emp=(Object[])li.get(i);
System.out.println(emp[0]+" "+emp[1]+" "+emp[2]);
}
/**
* 注册新用户并将此新添加的对象返回
* @param user
* @return
*/
public TUser addUser(TUser user) {
this.beginTransaction();
this.getSession().save(user);
this.commitTransaction();
return user;
}
--------------------利用HQL绑定参数查询(1.按参数位置绑定,2.按参数名称绑定)
(1)按参数位置绑定(需要用 ?来代替参数)
public List getAllEmp(String sex){
Query q=this.getSession().createQuery("from TEmp as a where a.ESex=?");//查询性别为男或女的员工
//Query q=this.getSession().createQuery("from TEmp as a where a.EName=? and a.ESex=?");//多条件查询
q.setString(0, sex);//设置参数,位置从0开始
List li=q.list();
this.closeSession();
return li;
}
main()方法里:
List li=dao.getAllEmp("女");
for(int i=0;i<li.size();i++){
TEmp emp=(TEmp)li.get(i);
System.out.println(emp.getEId()+" "+emp.getEName()+" "+emp.getESex());
}
(2)按参数名称绑定(需要用 : 来代替参数)
public List getAllEmp(String name,String sex){
Query q=this.getSession().createQuery("from TEmp as a where a.EName=:x and a.ESex=:y");
q.setParameter("x","张飞");
q.setParameter("y", "男");
List li=q.list();
this.closeSession();
return li;
}
-------------------只返回一个检索对象
(1)抓取第一条,不按编号查询
public TEmp getOneEmp(){
TEmp emp=(TEmp) this.getSession().createQuery("from TEmp").setMaxResults(1).uniqueResult();//返回的是第一条结果
this.closeSession();
return emp;
(2)根据编号来查询返回一个对象
public TEmp getOneEmp(int e_id){
Query q=this.getSession().createQuery("from TEmp as a where a.EId=?");
q.setInteger(0, e_id);
TEmp emp=(TEmp) q.uniqueResult();
this.closeSession();
return emp;
}
----------------分页面查询
public List getAllEmp(int currpage,int allcount){
Query q=this.getSession().createQuery("from TEmp");
q.setFirstResult(currpage);
q.setMaxResults(allcount);
List li=q.list();
this.closeSession();
return li;
}
//统计有多少个员工
public int getCount(){
int count=0;
Query q=this.getSession().createQuery("select count(*) from TEmp");
count=Integer.parseInt(q.uniqueResult().toString());
return count;
}
----------------分组查询
public List getByGroup(){
List li=this.getSession().createQuery("select a.ESex,count(*) from TEmp as a group by a.ESex").list();
this.closeSession();
return li;
}
---------------批量更新
public void updateAll(String name){
this.beginTransaction();
Query q=this.getSession().createQuery("update TEmp as a set a.EName=?");
q.setString(0, name);
q.executeUpdate();
this.commitTransaction();
}
---------------------------------------QBC动态查询-------------------------------------
(1)根据性别来查询
public List getEmp(String sex){
Criteria criteria=this.getSession().createCriteria(TEmp.class);
criteria.add(Restrictions.eq("ESex", sex));
List ar=criteria.list();
this.closeSession();
return ar;
}
main方法里:
List li=dao.getEmp("女");
for(int i=0;i<li.size();i++){
TEmp emp=(TEmp)li.get(i);
System.out.println(emp.getEName()+" "+emp.getESex());
}
(2)全查询所有性别为男的员工并且关联部门
public List getEmp(String sex){
Criteria criteria=this.getSession().createCriteria(TEmp.class);
criteria.add(Restrictions.eq("ESex", sex));
criteria.createCriteria("TDept");//此处关联,不加报错
List ar=criteria.list();
this.closeSession();
return ar;
}
main方法里:
List li=dao.getEmp("女");
for(int i=0;i<li.size();i++){
TEmp emp=(TEmp)li.get(i);
System.out.println(emp.getEName()+" "+emp.getESex()+emp.getTDept().getDName());
}
(3)按员工姓名模糊查询(关联部门)
public List getEmp(String name){
Criteria criteria=this.getSession().createCriteria(TEmp.class);
criteria.add(Restrictions.like("EName",name, MatchMode.ANYWHERE));
criteria.createCriteria("TDept");
List ar=criteria.list();
this.closeSession();
return ar;
}
main方法里:
List li=dao.getEmp("操");
for(int i=0;i<li.size();i++){
TEmp emp=(TEmp)li.get(i);
System.out.println(emp.getEName()+" "+emp.getESex()+emp.getTDept().getDName());
}
分享到:
相关推荐
2. HQL(Hibernate Query Language):HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是针对对象而不是表格进行操作的。HQL允许开发者以类和对象的方式编写查询,支持复杂的查询结构,如连接、子查询、...
之前也发了一个,这个包含之前的,还添加了hibernate对数据库操作的代码(注意:controller层两个QBC/SQLTest代码不能运行,只是写出了操作数据库的除了HQL的另外2种方式)。我发现现在还是有很多公司用hibernate+...
首先,HQL是Hibernate专门设计的一种面向对象的查询语言,它的语法类似于SQL,但更注重对象而非表。例如,如果我们有一个`User`实体,我们可以使用HQL来获取所有用户: ```java Session session = sessionFactory....
本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...
HQL(Hibernate Query Language)和QBC(Query By Example)是Hibernate提供的两种主要的查询方式,它们提供了灵活且强大的查询能力。下面将详细阐述这两种查询方式以及它们的查询条件。 **HQL(Hibernate Query ...
QBC提供了一种面向对象的方式来构建查询,避免了SQL语句的硬编码,使得代码更易于维护和测试。 在Hibernate QBC中,我们主要会接触到以下几个关键概念: 1. **Criteria API**:它是Hibernate提供的一个API,允许...
本篇文章将深入探讨Hibernate中的QBC(Query By Example)条件查询与传统的HQL(Hibernate Query Language)查询的对比,帮助开发者更好地理解和选择适合的查询方式。 QBC(Query By Example)是Hibernate提供的一...
Query By Criteria(QBC)是一种基于对象的查询方式,它允许开发者通过构建Criteria对象来描述查询条件,然后由Hibernate自动转换为相应的SQL语句执行。这种方式提供了比HQL(Hibernate Query Language)更灵活的...
QBC的优势在于它的直观性和灵活性,但可能在性能上略逊于直接的SQL查询,尤其是在处理大量数据或复杂联查时。 总结起来,QBC是Hibernate中一种强大的查询工具,它为Java开发者提供了一种面向对象的查询方式,使得在...
最后,Hibernate也允许直接使用SQL查询,这对于处理复杂查询或者利用数据库特有的功能非常有用。不过,过度依赖SQL可能会削弱Hibernate作为ORM工具的优势。 总的来说,精通HQL是掌握Hibernate的关键步骤,它能帮助...
本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...
在本节中,我们将详细介绍 Hibernate 的查询机制和优化策略,包括 HQL、QBC 和 SQL 查询的使用和优化。 一、HQL 查询 HQL(Hibernate Query Language,Hibernate 查询语言)是 Hibernate 提供的一种查询语言,它...
总的来说,Hibernate的`Criteria`、`Query`以及QBC(Query By Criteria)提供了灵活且强大的查询手段,它们不仅支持基本的单表查询,还能处理复杂的联表、分页、参数绑定和统计需求,是Java开发者进行数据库操作的...
本文将深入探讨Hibernate的查询方式,特别聚焦于HQL(Hibernate Query Language)查询方式以及QBC(Query By Criteria)查询方式,旨在帮助读者全面理解并掌握这些核心功能。 #### HQL查询方式:面向对象的查询语言...
Hibernate提供了三种主要的查询方式:SQL、HQL(Hibernate Query Language)和QBC(Query by Criteria)。 1. SQL查询: Hibernate支持直接执行SQL语句,这使得开发者可以充分利用数据库的特性和性能。通过`...
QBC(Query By Criteria)是Hibernate提供的一种查询方式,允许开发者通过构建查询条件来动态地创建SQL查询语句。相比于传统的HQL(Hibernate Query Language),QBC提供了更加灵活且易于控制的查询方式,特别适用于...
QBE是一种基于对象实例的查询方式,它的理念是创建一个对象实例,然后根据这个实例的属性来构造SQL查询。QBE相对简单,适合于查询条件较少且不复杂的场景。QBE的主要特点包括: 1. **直观易用**:只需要创建一个...
Hibernate 提供了多种查询方式,包括 HQL(Hibernate Query Language)、QBC(Query By Criteria)和 JPA(Java Persistence API)的 Criteria API。这些查询语言提供了面向对象的方式来检索数据,比传统的 SQL 更加...
HQL是Hibernate提供的面向对象的查询语言,类似于SQL但更接近于面向对象编程的概念。HQL允许开发者以类和对象的方式书写查询,而不是以表格和列。例如,以下是一个简单的HQL查询示例: ```java Session session = ...
本实验“Hibernate试验”主要关注的是通过Hibernate使用SQL查询,包括本地SQL检索、命名SQL查询以及自定义SQL语句,同时也涉及到QBC(Query By Criteria)查询方式,这是一种基于对象的查询方式,与HQL(Hibernate ...