Hibernate入门(六)---------HQL语句
Query:
代表面向对象的一个Hibernate查询操作.在Hibernate中,通常使用session.createQuery()方法接收一个HQL语句,然后调用Query的
list()或uniqueResult()方法执行查询。所谓的HQL是Hibernate Query Language缩写,其语法很像SQL,但它是完全面向对象的。
在Hibernate中使用Query对象的步骤,具体:
1.获得Hibernate的Session对象
2.编写HQL语句
3.调用session.createQuery()创建查询对象
4.如果HQL语句包含参数,则调用Query的setXxx设置参数
5.调用Query对象的list(),或uniqueResult()方法执行查询。
①查询所有记录
@Test
public void fun3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student";
Query query = session.createQuery(hql);
List<Student> list = query.list(); System.out.println(list);
}

②条件查询
public void fun4(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student Where sno = ?";
Query query = session.createQuery(hql);
query.setInteger(0, 1001);
Student stu = (Student) query.uniqueResult();
session.close();
System.out.println(stu.getGender());
}

③条件查询(命名标识符)
public void fun5(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student where sname = :aaa and sage = :bbb";
Query query = session.createQuery(hql);
query.setString("aaa","张三");
query.setInteger("bbb", 25);
List<Student> list = query.list();
session.close();
System.out.println(list.get(0).getName());
}

④分页查询
public void fun6(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student";
Query query = session.createQuery(hql);
//相当于 limit 1,3
query.setFirstResult(1);
query.setMaxResults(3);
List<Student> list = query.list();
session.close();
System.out.println(list);
}

Query中除了list()方法查询全部数据之外,还有一些其它常用方法,具体如下:
setter()方法:Query接口中提供了一系列的setter方法用于设置查询语句的参数,针对不同的数据类型,需要用到不同的setter方法。
iterator()方法:该方法用于查询语句,返回的结果是Iterator对象,在读取时只能按照顺序方式读取,它仅把使用到的数据转换成Java实体对象。
uniqueResult()方法:该方法用于返回唯一的结果,在确保只有一条记录的查询时可以使用该方法。
executeUpdate()方法:该方法是Hibernate3的新特性,它支持HQL语句的更新和删除操作。
setFirstResult()方法:该方法可以设置获取第一个记录的位置,也就是它表示从第几条记录开始查询,默认从0开始计算
setMaxResult()方法:该方法用于设置结果集的最大记录数,通常与setFirstResult()方法结合使用,用于限制结果集的范围,以实现分页功能。
Criteria是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现,以及SQL语句如何编写,它是Hibernate框架的核心查询对象。
Criteria查询,又称QBC查询(Query By Criteria)它是Hibernate的另一种对象检索方式。org.hibernate.criterion.Criterion是Hibernate提供的一个面向对象查询条件接口,一个单独的查询就是Criterion接口的一个实例,用于限制Criteria对象的查询,在Hibernate中Criterion对象的创建是通过Restrictions工厂类完成的,它提供了条件查询方法。通常:使用Criteria对象查询数据的主要步骤:
1)获得Hibernate的Session对象。
2)通过Session获得Criteria对象。
3)使用Restrictions的静态方法创建Criterion条件对象。(Restrictions类中提供了一系列用于设定查询条件的静态方法,这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。)
4)向Criteria对象中添加Criterion查询条件。Criteria的add()方法用于加入查询条件。
5)执行Criteria的list()或uniqueResult()获得结果。
①查询所有记录
@Test
public void fun7(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Student.class);
List<Student> list = criteria.list(); session.close(); System.out.println(list); }

②条件查询
@Test
public void fun8(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Student.class);
criteria.add(Restrictions.eq("name", "张三"));
List<Student> list = criteria.list(); session.close(); System.out.println(list);
}

③分页查询
@Test
public void fun9(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Student.class);
criteria.setFirstResult(1);
criteria.setMaxResults(3);
List<Student> list = criteria.list(); session.close();
System.out.println(list);
}

SQLQuery这个接口用于接收一个sql语句进行查询,然后调用list()或者uniqueResult()方法进行查询。但是sql语句不会直接封装到实体对象中,需要我们手动写代码才可以封装到实体中
@Test
public void fun10(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery("SELECT *FROM student");
List<Object[]> list = sqlQuery.list(); for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
session.close(); }

Hibernate入门(六)---------HQL语句的更多相关文章
- 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用
概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...
- Hibernate 中update hql语句
今天在MySQL中用hibernate测试update语句发现以下问题: update语句竟然不去作用: 表机构如下: create table student(sid int primary key ...
- Hibernate 表连接hql语句
现有两个表 user 表 和 VIPcard 表 UserVo user VIPcardVo 中含有 UserVo user select v from VIPCardVo v left join ...
- hibernate -- HQL语句总结
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...
- 【Hibernate 6】常用的hql语句以及N+1问题
HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一.测试类 Classes类: <span ...
- Hibernate 的HQL语句,初级
这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf(&qu ...
- hibernate 之 HQL语句总结【转】
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...
- Hibernate学习之hql查询语句
* 页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接 结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...
- Hibernate框架HQL语句
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
随机推荐
- WEB站点服务器安全配置
WEB站点服务器安全配置 本文转自:i春秋社区 // 概述 // 熟悉网站程序 // 更改默认设置的必要性 // 目录分析与权限设置技巧 // 防止攻击其他要素 // 公司官网不可忽视的安全性 ...
- Java核心技术卷一基础知识-第8章-事件处理-读书笔记
第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...
- 第70节:Java中xml和tomcat
第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...
- Pycharm用Ctrl+鼠标滚轮控制字体大小
一.pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) ...
- 使用 VS Code 开发和调试 .NET Core 程序
电脑不想装几十个G的 VS2017,那就用 VS Code 吧 目标: 创建一个类库项目 Skany.Core,并用 Nuget 引用第三方组件 Hash 实现加密算法 创建一个单元测试项目 Skan ...
- 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我
一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...
- JDK9新特性实战:流关闭新姿势
做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能. 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化. JDK6 在JDK ...
- 浅谈React16框架 - Fiber
前言 React实现可以粗划为两部分:reconciliation(diff阶段)和 commit(操作DOM阶段).在 v16 之前,reconciliation 简单说就是一个自顶向下递归算法,产 ...
- python(leetcode)-重复元素算法题
leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...
- visual Studio 2017 扩展开发(三)《绑定快捷键到菜单项》
如何将键盘快捷方式映射到自定义按钮,怎么使用快捷键启动自己创建的菜单,刚开始做的时候迷糊了,找了很久.可能也是因为刚开始做不是很明白,后面慢慢就懂了.其实非常简单的. 很多快捷键已经在Visual s ...