
深入理解SSH框架:HQL与QBC查询技术详解
下载需积分: 50 | 7.58MB |
更新于2025-01-25
| 38 浏览量 | 举报
收藏
SSH框架是JavaEE领域中广泛使用的一种集成框架,它主要由Struts2、Spring、Hibernate三个主要部分构成。SSH框架能够帮助开发者简化Web应用的开发,通过整合这三个框架的优秀特性,能够快速搭建起企业级应用系统。在SSH框架中,Hibernate扮演着数据持久层的角色,提供了一系列数据库交互的方式。下面,将根据提供的标题、描述和标签,详细介绍SSH框架中Hibernate相关的知识点,特别是HQL查询、QBC查询以及本地SQL查询。
### HQL查询
HQL(Hibernate Query Language)查询是Hibernate提供的对象查询语言,类似于SQL语言,但是HQL是面向对象的查询语言。HQL查询允许通过类名和属性名来访问数据库,无需关心数据库的具体表结构。在HQL中可以执行各种数据库操作,包括但不限于查询、更新、删除等。
#### 基于位置参数查询
基于位置参数的查询类似于JDBC预处理语句中的问号占位符,可以通过位置参数来指定查询的值。例如,通过用户ID查询用户信息的HQL可以写为:
```java
String hql = "from User where id = ?";
List<User> users = session.createQuery(hql).setParameter(0, userId).list();
```
#### 基于命名参数查询
命名参数查询使用命名占位符(例如::name),可以更直观地表示参数含义。命名参数查询的示例如下:
```java
String hql = "from User where name = :userName";
List<User> users = session.createQuery(hql).setParameter("userName", userName).list();
```
#### 分页查询
分页查询在处理大量数据时非常有用,HQL提供了`setFirstResult(int)`和`setMaxResults(int)`方法来实现分页功能。例如,查询第二页的用户信息,每页10条记录:
```java
String hql = "from User";
Query query = session.createQuery(hql);
query.setFirstResult(10); // 跳过前10条记录
query.setMaxResults(10); // 读取接下来的10条记录
List<User> users = query.list();
```
#### 命名查询
命名查询允许将HQL语句保存在映射文件中,并给它一个唯一的名称。之后可以通过名称来执行查询。在映射文件中定义命名查询:
```xml
<named-query name="userQuery">
<query>
from User where id = :userId
</query>
</named-query>
```
使用命名查询:
```java
List<User> users = session.getNamedQuery("userQuery").setParameter("userId", userId).list();
```
#### 投影查询报表查询
投影查询是获取对象的部分属性的查询,通常用于生成报表。在HQL中使用`select`子句来指定需要查询的属性:
```java
String hql = "select name, age from User";
List<Object[]> results = session.createQuery(hql).list();
```
#### 内连接查询与迫切内连接查询
内连接查询仅返回匹配的记录,使用关键字`inner join`:
```java
String hql = "from User inner join fetch User.address";
```
迫切内连接查询会在首次访问关联对象时立即加载它,使用`inner join fetch`来实现:
```java
String hql = "from User inner join fetch User.address";
```
#### 左外连接查询与迫切左外连接查询
左外连接查询即使外键为null也会返回记录,使用`left outer join`:
```java
String hql = "from User left outer join User.address";
```
迫切左外连接查询会在首次访问关联对象时立即加载它,使用`left outer join fetch`来实现:
```java
String hql = "from User left outer join fetch User.address";
```
### QBC查询
QBC(Query By Criteria)查询是Hibernate提供的基于对象的查询方式,它基于一系列的Criteria接口方法来构建查询。QBC查询相较于HQL查询,语法更加严谨,但是可能在某些复杂的查询情况下表达不够灵活。
#### QBC检索查询
QBC检索查询可以根据类的属性和方法进行查询,避免了字符串拼接,可以减少因输入错误导致的错误。
```java
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("name", userName));
List<User> users = criteria.list();
```
#### 统计查询
统计查询可以用来进行数据库中的统计计算,如计数、求和等。
```java
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(Projections.count("id"));
Long totalUsers = (Long) criteria.uniqueResult();
```
#### 排序查询
排序查询可以按照某个属性进行排序。
```java
Criteria criteria = session.createCriteria(User.class);
criteria.addOrder(Order.desc("age"));
List<User> users = criteria.list();
```
#### HQL操作数据库
HQL除了进行对象查询外,还可以执行一些数据库级别的操作,如创建、更新、删除等。
```java
String hql = "delete from User where age > :age";
int deletedRows = session.createQuery(hql).setParameter("age", 20).executeUpdate();
```
### 本地SQL查询
本地SQL查询允许执行原生的SQL查询语句,直接与数据库交互。本地SQL查询在某些复杂查询或者对性能要求较高的场景中非常有用。
```java
String sql = "SELECT * FROM users";
SQLQuery query = session.createSQLQuery(sql);
List<Object[]> results = query.list();
```
通过上述介绍,我们可以看出,在SSH框架中,Hibernate提供了一系列丰富的查询接口和方法,开发者可以根据具体的业务需求选择使用不同的查询方式,从而高效地与数据库交互。
相关推荐



















ouyuyao
- 粉丝: 44
最新资源
- PDFdo PDF Converter v3.5:下载指南及云盘存储方法
- 微信小程序实现幸运大转盘抽奖源码解析
- 初学者的Java游戏编程入门项目:俄罗斯方块
- 谷歌浏览器Chrome 30.0.1599.69版离线安装指南
- AI大模型作业项目压缩包内容解析
- 商城企业网站模板_棕色黑色幻灯整站设计
- MT管理器vip版v2.13.1:强大的文件管理和APK逆向工具
- 探索iOS 15.6 inject.dmg文件的秘密
- 神思SS628-100读卡器:C++/Java示例代码及动态库使用指南
- Juniper SRX系列防火墙新版本12.3X48-D105.4发布
- 新闻客户端企业城微信小程序前端源码解析
- 超级水印v4.7.1专业版:专业水印软件发布
- Java初学者适用的飞机大战游戏示例项目
- OpenCV依赖的DLL文件调用指南
- 快手100粉开通磁力聚星秒开教程
- 音乐下载工具v1.0:免费下载与云存储
- BasicOS:小RAM MCU下的共享栈协作内核
- PikPak v1.10.1高级版发布:离线下载不限速突破区域限制
- 初学者用Java开发的在线打砖块游戏
- 解锁文档:Office文件权限密码去除工具使用攻略
- Java实现2048游戏完整项目源码下载
- 简约时尚粉色灰色HTML5企业网站模板下载
- Movavi Video Suite v21.0官方下载地址
- 安装wget1.21.4:压缩包下载与系统路径配置