这里总结了hibernate常用的一些检索方式,供大家参考。
1、多态查询
在HQL中,如果查询一个表中的所有记录,语句如下:
String queryString="from cat";
或者指定其包名,例如cat的包名为com.test,
String queryString="from com.test.cat";
其中cat为实体类的类名,而不是数据库里面的表名称,大家注意一下,在查询一个类时,hibernate会自动搜索这个类的所有继承类,这就是多态查询。比如上面的cat,如果有继承cat的类,hibernate会把所有实例都查询出来。
2、指定列名
String queryString="from student s where s.name=?";
或者用as指定,String queryString="from student as s where s.name=?";
3、投影查询
通常在查询过程中,并非都需要查询一个类的所有属性,有时候只需要查询部分属性,这个时候就需要用select,并且在其后面加上需要查询的属性,代码如下:
String queryString="select s.age,s.name from student s";
注意:list里面对应的对象并不是student对象,它返回的是一个数组object[],示列如下:
while(i.hasNext)
{
Object [] o=(Object [])i.next();
}
在对象数组中,各个属性值是有顺序的。例如o[0]对应的就是age的值,o[1]所对应的就是name的值。这种输出方式有时候使用起来不太方便。当然,当只要查询一个元素的时候。比如name,它是String类型的,那么查询出来的返回结果也为String类型,而不是一个数组对象了。例如:
String queryString="select s.name from student s";
4、排序
排序的话使用的是关键字order by
例如根据学生编号的降序排序,用学生姓名的升序排序,
String queryString="from student s order by s.id desc,s.name asc";
5、消除重复记录
使用的关键字为distinct
String queryString="select distinct s.name form student s";
表示查询不同姓名的学生的姓名
6、调用函数
在查询过程中,有些功能很常用,比如统计符合条件的记录总数,计算平均数据等,对于这些常用的功能,hibernate定义了几个常用的聚集函数
count() 计算符合条件的记录总数
avg()计算符合条件的平均数
sum() 计算符合条件的和
max() 计算符合条件的最大值
min() 计算符合条件的最小值
例如查询数据库中学生的总数,代码如下:
String queryString="select count(*) form student ";
执行后,返回值为一个Long型的整数。
7、分组与关键字having
在一个班级中通常有很多学生,且学生分为优、中、良三个等级。如果要统计每个等级中的学生,就需要使用分组,其关键字为group by。代码如下:
String queryString="select s.level,count(*) form student s group by s.level";
该语句用于查询各个等级的学生总数,并且以level分组。若果不想查询所有等级,可以使用having,例如
String queryString="select s.level,count(*) form student s group by s.level having s.level in(1,2)";
表示只查询等级为1和2学生总数。
8、运算符
在hibernate中运算符也经常使用,常用的运算符如下:
(1) 数学运算符:+,-,*,/
(2 ) 比较运算符:>,<,=,>=,<=,!=,like
(3) 逻辑运算符:and,or,not
(4)其他运算符: in,not in, is null, is not null , is empty, is not empty,between...and...等。
例如用like模糊查询时,有两个可用的通配符:%和_,%表示长度大于等于0的字符,_表示长度等于1的字符,例如:查询username中含有a的对象。
String queryString="from user u where u.username like '%a%'";
查询username中第二个字符为c,且只有三个字符的对象,
String queryString="from user u where u.username like '_a_'";
查询id在1-5之间的实体对象
String queryString="from user u where u.id between 1 and 5";
大家在设定between...and ...不要把查询范围设置反了,以免发生错误。
其他的运算符用法基本类似,大家可以根据自己需要的选择相应的运算符。
相关推荐
根据提供的文件信息,我们可以归纳和展开以下几个核心知识点: ### 一、安博Hibernate培训资料概述 #### 1.1 安博培训背景介绍 - **安博教育集团**是一家知名的IT培训机构,提供包括网络技术、数据库管理等多个...
根据提供的文档信息,我们可以归纳出该文档主要围绕Hibernate框架展开,并详细介绍了持久层的概念及其相关技术。接下来,我将从标题、描述、标签以及部分内容中提取关键知识点,并对其进行详细阐述。 ### Hibernate...
2. 设置Hibernate框架,配置hibernate.cfg.xml文件,包括数据库连接信息,以及实体类与数据库表的映射(通过hibernate.hbm.xml文件或注解方式)。 3. 在TopicDao接口中定义一个抽象方法`TopicAll()`,这个方法用于...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点:Struts2框架、Hibernate3.3、J2SE(Java 2 Platform Standard Edition)以及与网络游戏相关的开发技术。 ### Struts2框架 #### 概述 Struts2是Apache ...
根据提供的文件信息,我们可以归纳出一系列与Java及其相关技术栈有关的重要知识点。下面将对这些知识点进行详细解析,帮助读者更好地理解每个技术的核心概念及应用场景。 ### Java **概述:** Java是一种广泛使用...
- **掌握常用的集成框架**:如Log4J(日志记录)、Quartz(任务调度)、JGroups(网络通信)、JCache(分布式缓存)、Lucene(全文检索)等,提高系统的可维护性和扩展性。 通过以上这些知识点的学习,Java开发者...
根据提供的文件信息,我们可以归纳出一系列与毕业设计相关的IT项目案例及技术栈组合。这些案例主要涉及了多种软件开发环境和技术领域,包括但不限于网站开发、数据库管理、移动应用开发等。接下来,我们将针对这些...
- **新闻检索模块**:支持关键字搜索、分类浏览等方式查找新闻。 - **用户管理模块**:包括用户注册、登录、权限管理等功能。 ### 五、系统实现 #### 5.1 技术实现细节 - **JSP页面**:用于显示新闻列表、新闻...
- **丰富的库支持**:Java拥有庞大的开源社区,提供了大量成熟的库和框架,如Spring、Hibernate等,大大简化了分布式系统的开发难度。 #### 2. Java在分布式电商系统中的具体应用 - **服务端开发**:使用Spring ...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. JavaEE 4.3 版本特性 - **JavaEE(Java Platform, Enterprise Edition)**:是Sun Microsystems公司推出的一个企业级应用开发平台标准,它定义...
abstract (关键字) 抽象 ['æbstrækt] access vt.访问,存取 ['ækses]'(n.入口,使用权) algorithm n....Annotation [java] 代码注释 [ænәu'... \uxxxx 1到4位16进制数指定Unicode字符输出(xxxx) \\ \ \' ' \" ...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 一、JavaEE技术栈 #### 1. JavaEE概述 Java Platform, Enterprise Edition (JavaEE) 是一个为开发企业级应用提供的一系列技术和规范的集合。它基于...
根据提供的文档信息,我们可以归纳出一系列与计算机毕业设计相关的选题及系统开发方向。这些选题不仅涵盖了多种软件系统的开发,还涉及到了不同的业务场景和技术栈。以下是对这些选题进行详细解读的知识点: ### 1....
SSH框架指的是Struts、Spring和Hibernate三个开源框架的整合,这三种框架分别负责表现层、业务层和服务层的开发。Struts主要负责MVC(Model-View-Controller)架构中的控制层,Spring是一个业务对象框架,而...