1. 查询整个映射对象所有字段
-
//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段
-
String hql = "from Users"
;
-
Query query = session.createQuery(hql);
-
-
List<Users> users = query.list();
-
for
(Users user : users){
-
System.out.println(user.getName() + " : "
+ user.getPasswd() +
" : "
+ user.getId());
-
}
-
-
输出结果为:
-
name1 : password1 : 1
-
name2 : password2 : 2
-
name3 : password3 : 3
2.查询单个字段
-
//查询单个字段
-
String hql = " select name from Users"
;
-
Query query = session.createQuery(hql);
-
-
List<String> list = query.list();
-
for
(String str : list){
-
System.out.println(str);
-
}
-
输出结果为:
-
name1
-
name2
-
name3
3.查询其中几个字段
-
//查询其中几个字段
-
String hql = " select name,passwd from Users"
;
-
Query query = session.createQuery(hql);
-
//默认查询出来的list里存放的是一个Object数组
-
List<Object[]> list = query.list();
-
for
(Object[] object : list){
-
String name = (String)object[0
];
-
String passwd = (String)object[1
];
-
-
System.out.println(name + " : "
+ passwd);
-
}
-
输出结果为:
-
name1 : password1
-
name2 : password2
-
name3 : password3
4.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回
引用
//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了
String hql = " select new list(name,passwd) from Users";
Query query = session.createQuery(hql);
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了
List<List> list = query.list();
for(List user : list){
String name = (String)user.get(0);
String passwd = (String)user.get(1);
System.out.println(name + " : " + passwd);
}
/**
输出结果为:
name1 : password1
name2 : password2
name3 : password3
*/
5.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回
-
//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了
-
String hql = " select new map(name,passwd) from Users"
;
-
Query query = session.createQuery(hql);
-
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了
-
List<Map> list = query.list();
-
for
(Map user : list){
-
//一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值
-
//
如果将hql改
为:String hql = " select new map(name as username,passwd as password) from Users";,
那么key将不是字符串0,1,2...了,而是"username","password"了
-
String name = (String)user.get("0"
);
//get("0");是get(key),注意:0,1,2...是字符串,而不是整形
-
String passwd = (String)user.get("1"
);
-
-
System.out.println(name + " : "
+ passwd);
-
}
-
/**
-
输出结果为:
-
name1 : password1
-
name2 : password2
-
name3 : password3
-
*/
6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重复的元素,所
以:username和password的值不能相同。只需将hql改为:String hql = " select new
set(name,passwd) from Users";
7.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回
自定义类:
-
package
com.domain;
-
-
public
class
MyUser {
-
-
private
String username;
-
private
String password;
-
//因为:String hql = " select new com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数
-
public
MyUser(String username,String password){
-
this
.username = username;
-
this
.password = password;
-
}
-
-
public
String getUsername() {
-
return
username;
-
}
-
public
void
setUsername(String username) {
-
this
.username = username;
-
}
-
public
String getPassword() {
-
return
password;
-
}
-
public
void
setPassword(String password) {
-
this
.password = password;
-
}
-
-
-
}
-
//
通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包
名,String hql = "from Users";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里<
hibernate-mapping auto-import="true"> auto-import默认值为true(所以auto-
import属性也可以不写),自动导入了
-
String hql = " select new com.domain.MyUser(name,passwd) from Users"
;
-
Query query = session.createQuery(hql);
-
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了
-
List<MyUser> myUsers = query.list();
-
for
(MyUser myUser : myUsers){
-
String name = myUser.getUsername();
-
String passwd = myUser.getPassword();
-
System.out.println(name + " : "
+ passwd);
-
}
-
/**
-
输出结果为:
-
name1 : password1
-
name2 : password2
-
name3 : password3
-
*/
8:条件查询
-
//条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数
-
String hql = "from Users where name=? and passwd=?"
;
-
Query query = session.createQuery(hql);
-
//第1种方式
-
// query.setString(0, "name1");
-
// query.setString(1, "password1");
-
//第2种方式
-
query.setParameter(0
,
"name1"
,Hibernate.STRING);
-
query.setParameter(1
,
"password1"
,Hibernate.STRING);
-
List<Users> list = query.list();
-
for
(Users users : list){
-
System.out.println(users.getId());
-
}
-
//条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数
-
String hql = "from Users where name=:username and passwd=:password"
;
-
Query query = session.createQuery(hql);
-
//第1种方式
-
// query.setString("username", "name1");
-
// query.setString("password", "password1");
-
//第2种方式,第3个参数确定类型
-
query.setParameter("username"
,
"name1"
,Hibernate.STRING);
-
query.setParameter("password"
,
"password1"
,Hibernate.STRING);
-
List<Users> list = query.list();
-
for
(Users users : list){
-
System.out.println(users.getId());
-
}
-
//条件查询,通过setProperties设置参数
-
String hql = "from Users where name=:username and passwd=:password"
;
-
Query query = session.createQuery(hql);
-
//MyUser类的2个属性必须和:username和:password对应
-
MyUser myUser = new
MyUser(
"name1"
,
"password1"
);
-
query.setProperties(myUser);
-
List<Users> list = query.list();
-
for
(Users users : list){
-
System.out.println(users.getId());
-
}
分享到:
相关推荐
本文将对Hibernate HQL查询语法进行总结,涵盖基础查询、属性查询、实例化查询以及查询链接等多个方面。 1. 基础查询: 基础查询是最简单的HQL语句,用于获取所有`Student`对象。例如: ```java from Student ``` ...
### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...
Hibernate HQL 查询语句总结 Hibernate HQL 查询语句是 Hibernate 框架中的一种查询语言,它提供了更加丰富的和灵活的查询特性,具有类似标准 SQL 语句的查询方式,同时也提供了更加面向对象的封装。以下是 ...
总结来说,Hibernate HQL提供了一种强大的工具,让开发人员能够以面向对象的方式进行数据库查询,从而提高开发效率并简化代码结构。通过本文的介绍,希望能够帮助读者更好地理解和掌握HQL的基本概念及用法。
### Hibernate HQL 基本操作详解 #### 一、HQL简介 HQL,即Hibernate Query Language,是Hibernate提供的一种强大的查询语言。虽然它的语法结构看起来与SQL类似,但其实质上是一种面向对象的语言,能够理解并处理...
### WebLogic 12下org.hibernate.hql.ast.HqlToken冲突解决方案 在使用WebLogic 12部署应用程序时,可能会遇到与`org.hibernate.hql.ast.HqlToken`相关的异常问题。这种异常通常与Hibernate版本之间的不兼容性有关...
### Hibernate HQL 基本查询详解 #### 一、HQL 概述 HQL (Hibernate Query Language) 是一种面向对象的查询语言,由 Hibernate 官方提供,用于简化数据库查询过程。与传统的 JDBC 方式相比,使用 HQL 进行数据库...
以上内容涉及了使用 HQL 和 DetachedCriteria 进行查询、参数化查询、执行更新操作以及简单的统计查询等常见的 Hibernate 操作。这些知识点对于理解和掌握 Hibernate 框架的基本使用至关重要,同时也是开发基于 ...
### Hibernate HQL 查询详解 #### 一、HQL 概述 Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性...
总结起来,熟练掌握Hibernate HQL的命名参数和Query接口的分页查询是提高数据操作效率的关键。同时,注意处理可能出现的数据库关键字冲突问题,确保ORM映射的正确性。通过这些技巧,开发者可以更好地控制和优化...
总结,掌握Hibernate HQL级联查询的关键在于理解数据库模型、Java对象和映射文件之间的关系,以及如何在HQL中正确表达这些关系,从而实现高效的数据库操作。在实际开发中,应合理利用级联查询的优势,同时注意其可能...
总结,Hibernate HQL是Java开发者处理数据库查询的强大工具,它提供了一种面向对象的方式来表达SQL查询,使代码更加可读且易于维护。通过理解并熟练掌握HQL,可以显著提高开发效率,更好地利用Hibernate框架的潜力。
"Hibernate-HQL语句多对多写法" Hibernate 是一个流行的 Java 持久层框架,它提供了强大的对象...总结来说,Hibernate 的 HQL 语言提供了强大的查询功能,可以方便地检索和操作数据,特别是在多对多关系的情况下。
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
总结,Hibernate的HQL查询为开发者提供了强大且灵活的数据检索方式,使得在Java应用中操作数据库变得更加简单,同时提高了代码的可读性和可维护性。在实际开发中,熟练掌握HQL能极大地提升工作效率,特别是在处理...
2. **读取(Read)**:`get()` 或 `load()` 方法用于根据主键获取对象,`query()` 或 HQL(Hibernate 查询语言)用于执行更复杂的查询。 3. **更新(Update)**:修改对象后,调用 `update()` 或 `merge()` 方法同步...
### Hibernate HQL 教程知识点总结 #### 1.1 HQL基础 ##### 1.1.1 默认数据库表和数据 - **介绍**: 本文档以`joblog`数据库为例,该数据库包含三个表:`student`(学生表)、`course`(课程表)和`sc`(选课表)。 - **...
### HQL:Hibernate 查询语言详解 #### 一、引言 HQL,即Hibernate Query Language,是Hibernate框架中的一种强大且灵活的查询语言。虽然它的语法看起来与SQL类似,但其实质上是一种面向对象的语言,能够很好地...
### Hibernate_HQL大全详解 #### 一、HQL概述 HQL,即Hibernate Query Language,是一种强大且面向对象的查询语言,由Hibernate框架提供。尽管HQL的语法结构与SQL相似,但其设计理念完全不同,HQL是专门为面向对象...