- 浏览: 202238 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
star_qiong:
ftl 入门 -
star_qiong:
ftl 入门 -
star_qiong:
[b ][/b]
ftl 入门 -
boaixiaohai:
markvery good
Hibernate的八大类HQL查询集合 -
carolli:
huangyunbin 写道但是我的项目中没有配置-vm C: ...
eclipse maven plugin 安装设置
Hibernate的八大类HQL查询集合:
一:属性查询(SimplePropertyQuery)
1,单一属性查询
*返回结果集属性列表,元素类型和实体类中相应的属性一致
2, 多个属性查询,
* 返回集合中的元素是object数组,
* 其中数组元素的类型和对应属性在实体类中的类型一致
代码:
for(Iterator iterator=list.iterator();iterator.hasNext();)
{
Object[] obj=(Object[])iterator.next();
System.out.println("sid:="+obj[0].toString()+" sname:="+obj[1]);
}
3, 通过hql来动态实例化对象
代码:
List list=session.createQuery("select new Student(sid,sname) from Student").list();
for (Iterator iterator=list.iterator();iterator.hasNext();){
Student student=(Student) iterator.next();
System.out.println("sid:="+student.getSid()+" sname:="+student.getSname());
}
4,采用别名查询
代码:
//List list=session.createQuery("select s.sid, s.sname from Student as s").list();
List list=session.createQuery("select s.sid, s.sname from Student s").list();
二:简单对象查询(SimplyObjectQuery)
1,返回对象集合(可以忽略select)
代码:
//List list=session.createQuery("from Student").list();
//List list=session.createQuery("from Student as s").list();
List list=session.createQuery("from Student s").list();
2,采用select查询对象
* 必须要使用别名
代码:
//List list=session.createQuery("select s from Student as s").list();
List list=session.createQuery("select s from Student s").list();
3,查询单一对象的操作
代码:
Object obj=session.createQuery("select s from Student s where s.sid=:mysid")
.setParameter("mysid", 12)
.uniqueResult();
4,分页查询
* setFirstResult(int firstResult)
* Set the first row to retrieve.
* If not set, rows will be retrieved beginnning from row 0.
* firstResult - a row number, numbered from 0
代码:
List list=session.createQuery("select s from Student s")
.setFirstResult(5)
.setMaxResults(5)
.list();
三:简单条件查询(SimpleConditionQuery)
1,可以拼凑字符串
代码:
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like '%1%'").list();
2,注意:可以采用?占位的方式来传递参数
*参数的索引从0开始
*传递的参数值不能用''号括起来
*注意方法链编程
代码:
/*
*Query query=ession.createQuery("select s.sid, s.sname from Student as s where s.sname like ?");
*query.setParameter(0, "%1%");
*List stuList=query.list();
*/
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like ?")
.setParameter(0, "%1%")
.list();
3,通过参数名(:参数名)传参的方式进行查询
代码:
/*Object obj=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 98)
.uniqueResult();//.list();
Object[] objs=(Object[])obj;
System.out.println("s.sid:="+objs[0].toString()+" s.sname:="+objs[1].toString());
*/
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 98)
.list();
4,传递多个参数的查询
* 支持in查询,需要setParameterList("myids", new Object[]{12,13,14})的方式进行参数传递
代码:
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.id in(:myids)")
.setParameterList("myids", new Object[]{12,13,14})
.list();
5, 查询2009年2月入学的学员信息
*支持Sql函数查询
代码:
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where year(s.schoolDate)=:myyear and month(s.schoolDate)=:mymonth")
.setParameter("myyear", 2009)
.setParameter("mymonth", 2)
.list();
6,查询2009-02-10到2009-02-15号入学的学员信息
*注意:在进行日期查询时
*setParameter("startDate", formatter.parse("2009-02-10 00:00:00"))
*方法中第二个参数是一个Object对象(Date类型对象)
代码:
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where s.schoolDate between :startDate and :endDate")
.setParameter("startDate", formatter.parse("2009-02-10 00:00:00"))
.setParameter("endDate", formatter.parse("2009-02-15 23:59:59"))
.list();
四:原生SQL语句查询(SqlQueryTest_4)
*这里用的是createSQLQuery().list();
代码:
List stuList=session.createSQLQuery("select * from Student").list();
五:外置命名查询(NamedQueryTest_5)
* 1.在映射文件中采用<query>标签来定义HQL语句,不必限定文件!!!注意:映射文件中的HQL语句不可以出错,否则会导致 QuerySyntaxException,特别是要查询的实体类名写错的情况。(Error in named query: selectAllStudents org.hibernate.hql.ast.QuerySyntaxException: Students is not mapped)。
* 2.在程序中通过session.getNamedQuery(hql_name)得到查询语句
代码:
List list=session.getNamedQuery("selectAllStudents")
.setParameter("mysid",12).list();
六:对象导航查询(ObjectNavQueryTest_6)
代码:
List list= session.createQuery("select s.sname from Student as s where s.clsInfo.cname like :myname")
.setParameter("myname", "%1%")
.list();
七:联合查询(JoinQueryTest_7)
1,联合查询* 内连接查询
* 获取已经参加班级报名的所有学生名号和其所在班级名称
代码:
List list=session.createQuery("select s.sname,c.cname from Student as s join s.clsInfo as c").list();
2,联合查询* 左连接查询
* 获取所有班级名称和其学员姓名
* 以班级信息表为主表,进行左外连接查询
代码:
List list=session.createQuery("select c.cname ,s.sname from ClassInfo as c left join c.studentSet as s").list();
3,联合查询 * 右连接查询
* 获取所有学员姓名和其所属班级名称
* 以学员信息表为主表,进行右外连接查询
代码:
List list=session.createQuery("select s.sname, c.cname from ClassInfo as c right join c.studentSet as s").list();
八:(StateQueryTest_8)
1,聚合函数使用
代码:
//List list=session.createQuery("select count(*) from Student").list();
//long count=(Long) list.get(0);
long count=(Long) session.createQuery("select count(*) from Student").uniqueResult();
2,分组查询
代码:
List list=session.createQuery("select c.cname, count(s) from Student as s inner join s.clsInfo as c group by c.cname order by c.cname").list();
一:属性查询(SimplePropertyQuery)
1,单一属性查询
*返回结果集属性列表,元素类型和实体类中相应的属性一致
2, 多个属性查询,
* 返回集合中的元素是object数组,
* 其中数组元素的类型和对应属性在实体类中的类型一致
代码:
for(Iterator iterator=list.iterator();iterator.hasNext();)
{
Object[] obj=(Object[])iterator.next();
System.out.println("sid:="+obj[0].toString()+" sname:="+obj[1]);
}
3, 通过hql来动态实例化对象
代码:
List list=session.createQuery("select new Student(sid,sname) from Student").list();
for (Iterator iterator=list.iterator();iterator.hasNext();){
Student student=(Student) iterator.next();
System.out.println("sid:="+student.getSid()+" sname:="+student.getSname());
}
4,采用别名查询
代码:
//List list=session.createQuery("select s.sid, s.sname from Student as s").list();
List list=session.createQuery("select s.sid, s.sname from Student s").list();
二:简单对象查询(SimplyObjectQuery)
1,返回对象集合(可以忽略select)
代码:
//List list=session.createQuery("from Student").list();
//List list=session.createQuery("from Student as s").list();
List list=session.createQuery("from Student s").list();
2,采用select查询对象
* 必须要使用别名
代码:
//List list=session.createQuery("select s from Student as s").list();
List list=session.createQuery("select s from Student s").list();
3,查询单一对象的操作
代码:
Object obj=session.createQuery("select s from Student s where s.sid=:mysid")
.setParameter("mysid", 12)
.uniqueResult();
4,分页查询
* setFirstResult(int firstResult)
* Set the first row to retrieve.
* If not set, rows will be retrieved beginnning from row 0.
* firstResult - a row number, numbered from 0
代码:
List list=session.createQuery("select s from Student s")
.setFirstResult(5)
.setMaxResults(5)
.list();
三:简单条件查询(SimpleConditionQuery)
1,可以拼凑字符串
代码:
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like '%1%'").list();
2,注意:可以采用?占位的方式来传递参数
*参数的索引从0开始
*传递的参数值不能用''号括起来
*注意方法链编程
代码:
/*
*Query query=ession.createQuery("select s.sid, s.sname from Student as s where s.sname like ?");
*query.setParameter(0, "%1%");
*List stuList=query.list();
*/
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like ?")
.setParameter(0, "%1%")
.list();
3,通过参数名(:参数名)传参的方式进行查询
代码:
/*Object obj=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 98)
.uniqueResult();//.list();
Object[] objs=(Object[])obj;
System.out.println("s.sid:="+objs[0].toString()+" s.sname:="+objs[1].toString());
*/
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.sname like :myname and s.sid=:myid")
.setParameter("myname", "%1%")
.setParameter("myid", 98)
.list();
4,传递多个参数的查询
* 支持in查询,需要setParameterList("myids", new Object[]{12,13,14})的方式进行参数传递
代码:
List stuList=session.createQuery("select s.sid, s.sname from Student as s where s.id in(:myids)")
.setParameterList("myids", new Object[]{12,13,14})
.list();
5, 查询2009年2月入学的学员信息
*支持Sql函数查询
代码:
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where year(s.schoolDate)=:myyear and month(s.schoolDate)=:mymonth")
.setParameter("myyear", 2009)
.setParameter("mymonth", 2)
.list();
6,查询2009-02-10到2009-02-15号入学的学员信息
*注意:在进行日期查询时
*setParameter("startDate", formatter.parse("2009-02-10 00:00:00"))
*方法中第二个参数是一个Object对象(Date类型对象)
代码:
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List stuList=session.createQuery("select s.sid, s.sname ,s.schoolDate from Student as s where s.schoolDate between :startDate and :endDate")
.setParameter("startDate", formatter.parse("2009-02-10 00:00:00"))
.setParameter("endDate", formatter.parse("2009-02-15 23:59:59"))
.list();
四:原生SQL语句查询(SqlQueryTest_4)
*这里用的是createSQLQuery().list();
代码:
List stuList=session.createSQLQuery("select * from Student").list();
五:外置命名查询(NamedQueryTest_5)
* 1.在映射文件中采用<query>标签来定义HQL语句,不必限定文件!!!注意:映射文件中的HQL语句不可以出错,否则会导致 QuerySyntaxException,特别是要查询的实体类名写错的情况。(Error in named query: selectAllStudents org.hibernate.hql.ast.QuerySyntaxException: Students is not mapped)。
* 2.在程序中通过session.getNamedQuery(hql_name)得到查询语句
代码:
List list=session.getNamedQuery("selectAllStudents")
.setParameter("mysid",12).list();
六:对象导航查询(ObjectNavQueryTest_6)
代码:
List list= session.createQuery("select s.sname from Student as s where s.clsInfo.cname like :myname")
.setParameter("myname", "%1%")
.list();
七:联合查询(JoinQueryTest_7)
1,联合查询* 内连接查询
* 获取已经参加班级报名的所有学生名号和其所在班级名称
代码:
List list=session.createQuery("select s.sname,c.cname from Student as s join s.clsInfo as c").list();
2,联合查询* 左连接查询
* 获取所有班级名称和其学员姓名
* 以班级信息表为主表,进行左外连接查询
代码:
List list=session.createQuery("select c.cname ,s.sname from ClassInfo as c left join c.studentSet as s").list();
3,联合查询 * 右连接查询
* 获取所有学员姓名和其所属班级名称
* 以学员信息表为主表,进行右外连接查询
代码:
List list=session.createQuery("select s.sname, c.cname from ClassInfo as c right join c.studentSet as s").list();
八:(StateQueryTest_8)
1,聚合函数使用
代码:
//List list=session.createQuery("select count(*) from Student").list();
//long count=(Long) list.get(0);
long count=(Long) session.createQuery("select count(*) from Student").uniqueResult();
2,分组查询
代码:
List list=session.createQuery("select c.cname, count(s) from Student as s inner join s.clsInfo as c group by c.cname order by c.cname").list();
发表评论
-
关于Spring属性编辑器的使用(总结1):
2011-02-18 05:27 931关于Spring属性编辑器的使用(总结1): 当要给bean ... -
Spring属性编辑器
2011-02-18 05:25 14571. 自定义属性编辑器类editors.DatePropery ... -
Spring依赖注入相关操作
2011-02-18 05:24 1066Spring依赖注入相关操作: 1,如何给Eclipse配置 ... -
九:Spring与Struts,Hibernate的集成
2011-02-18 05:23 1178九:Spring与Struts,Hibernate的集成 t ... -
八:使用Spring容器管理对象
2011-02-18 05:23 3659八:使用Spring容器管理 ... -
五:使用Hibernate完成对象持久化
2011-02-18 05:19 1546五:使用Hibernate完成对象持久化 transient ... -
七--Criteria查询代码
2011-02-18 05:16 1073七--Criteria查询代码: public List s ... -
七:Hibernate查询
2011-02-18 05:15 1599七:Hibernate查询 query : ... -
六:Hibernate的关联映射
2011-02-18 05:14 1538六:Hibernate的关联映射 ... -
hibernate--出错记录
2011-02-18 05:13 1119hibernate--出错记录: 1,通过工具类初始化数据库 ... -
hibernate_操作(配置,BaseHibernateDao)
2011-02-18 05:12 2824hibernate_操作(配置,BaseHibernateDa ... -
关于struts1转换器和插件
2011-02-18 05:09 1059关于struts1转换器和插件 <controlle ... -
struts1.x的标签使用
2011-02-18 05:08 1079struts1.x的标签使用: 1.我们可以通过strut框 ... -
Struts1.x_all_main
2011-02-18 05:07 985(Struts1.x版本的文本) Struts1.x的使用拓 ... -
struts1.x_i18n_Convert_Plugin
2011-02-18 05:06 1115struts1.x_i18n_Convert_Plugin ... -
struts2的部分笔记
2011-02-18 05:00 960struts2的部分笔记: 1, jdk是包含调试的,JRE ... -
SSH整合(低版本)
2011-02-18 04:31 1294SSH整合(低版本) 手动配置SSH 1. 添加Hiberna ...
相关推荐
Hibernate的帮助手册提供了全面的框架指南,包括安装配置、对象关系映射、查询语言(HQL)、 Criteria 查询、事件监听、缓存机制等内容。对于初学者,手册是了解Hibernate核心概念的绝佳资源,例如实体类(Entity)...
HQL (Hibernate Query Language) 是一种面向对象的查询语言,它允许开发人员以面向对象的方式编写查询,而不是直接使用SQL。HQL的关键字通常不区分大小写,但在Java类与属性的名称中则需要注意大小写的一致性。 ###...
5. Query/Criteria:提供HQL(Hibernate Query Language)和Criteria API,用于执行数据库查询。 三、配置 Hibernate的配置文件通常为hibernate.cfg.xml,其中包含数据库连接信息、实体类路径、缓存设置等。另外,...
在开发过程中,HQL(Hibernate Query Language)是一种非常实用的查询语言。利用MyEclipse中的HQL编辑器,可以方便地编写和执行HQL查询语句。 #### 七、测试Hibernate Demo应用 1. **创建测试用例**:编写JUnit...
Hibernate Query Language (HQL) 是一种面向对象的查询语言,类似于SQL,但更符合面向对象的思维。它可以用来执行复杂的查询,包括关联查询、聚合函数、子查询等。 五、Criteria查询 Criteria API 提供了一种更加...
八、懒加载和集合映射 Hibernate支持懒加载(Lazy Loading),意味着关联对象不会在初始化时立即加载,而是在需要时才从数据库中获取。对于一对多或多对多关系,可以使用`@OneToMany`和`@ManyToMany`注解进行映射,...
使用Hibernate,开发者可以遵循一定的原则来设计持久化类,如定义get/set方法、提供默认构造器、使用集合接口类型和标识属性。此外,还需要通过Configuration类配置Hibernate,包括数据库连接信息、映射文件等。 ...
HQL是Hibernate的查询语言,类似SQL,但更面向对象。可以方便地进行复杂查询,如JOIN、GROUP BY、ORDER BY等。 六、Criteria API Criteria API 提供了一种更面向对象的方式来执行查询,无需编写HQL,通过构建...
- **查询**:介绍如何执行 HQL 查询、过滤集合、使用标准 SQL 等。 - **修改持久化对象**:讨论如何更新数据库中的对象状态。 - **修改游离对象**:解释如何处理游离状态下的对象修改。 - **自动状态检测**:描述 ...
Hibernate Query Language(HQL)是一种面向对象的查询语言,类似于SQL但更贴近Java对象。它可以方便地查询、更新和删除实体。此外,Criteria API也是另一种无SQL字符串的查询方式,提供更安全的类型检查。 **六、...
2. **集合延迟加载**:通过实现自定义的 SET/LIST 类型,Hibernate 提供了集合级别的延迟加载支持。 3. **属性延迟加载**:只加载实体的主键等基本信息,当需要其他属性时才发起查询。 #### 七、方法选用 1. **...
Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但更贴近Java对象。它是Hibernate的另一种查询方式,可以方便地操作对象关系。此外,Query By Criteria(QBC)也是Hibernate提供的查询接口,与...
5. 查询(Query/Criteria):通过HQL或Criteria API获取满足条件的对象集合。 六、缓存机制 1. 一级缓存:每个Session内部的缓存,自动管理,无需额外配置。 2. 二级缓存:SessionFactory级别的缓存,可选,提高...
1. HQL(Hibernate Query Language):面向对象的查询语言,类似于SQL,但操作对象而非表。它可以进行复杂的查询,包括聚合函数、关联查询等。 2. Criteria API:提供了一种动态构造查询的方式,更加面向对象,可以...
5. Query与Criteria API:提供了强大的查询功能,可以编写复杂的SQL语句,并支持HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)。 三、实体类与映射文件 在Hibernate中,每个数据库表...
HQL(Hibernate Query Language)是Hibernate提供的一种面向对象的查询语言。对于HQL的优化,除了遵循通用的SQL优化原则外,还需注意以下几点: 1. **减少不必要的查询**:确保每次查询都尽可能获取所需的所有数据...
4. **Query**: 提供了执行HQL(Hibernate Query Language)和 Criteria 查询的能力。 ### 三、Hibernate 配置 配置Hibernate涉及以下步骤: 1. 创建`hibernate.cfg.xml`配置文件,设置数据库连接信息,如URL、...
- **Query**:提供了 HQL(Hibernate Query Language)和 Criteria API 等方式来查询数据,其中 HQL 更接近于 SQL 语句。 #### 四、核心组件及配置 - **配置文件**:通常使用 `hibernate.cfg.xml` 文件来进行基本...
- **Query**:用于执行SQL或HQL(Hibernate Query Language)查询。 - **Criteria**:提供了一种动态创建查询的方式。 - **Mapping**:指对象和数据库表之间的映射关系。 #### 三、配置与初始化 - **hibernate.cfg...
5. Query和Criteria API:提供查询数据的方法,包括HQL(Hibernate Query Language)和Criteria API。 三、配置与初始化 Hibernate的配置主要通过hibernate.cfg.xml文件完成,包括数据库连接信息、实体类扫描路径、...