`
hwpok
  • 浏览: 250598 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HQL 总结

阅读更多
以个普通Users表为例:
建表语句:
CREATE DATABASE `interceptor`
CHARACTER SET 'utf8';
USE `interceptor`;
DROP TABLE IF EXISTS `users`;

create table users(
id int auto_increment primary key,
name varchar(10) not null,
passwd varchar(10) not null
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
User.java:
package com.domain;
public class Users implements java.io.Serializable {
private Integer id;
private String name;
private String passwd;
public Users() {
}
public Users(String name, String passwd) {
this.name = name;
this.passwd = passwd;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return this.passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
User.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.domain.Users" table="users" catalog="interceptor">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="10" not-null="true" />
</property>
<property name="passwd" type="java.lang.String">
<column name="passwd" length="10" not-null="true" />
</property>
</class>
</hibernate-mapping>
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){
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());
}

分享到:
评论

相关推荐

    Hiberbate hql总结

    以下是对HQL的总结,主要关注如何查询数据: 1. **查询整个映射对象所有字段** 当你想要获取整个实体类的所有字段数据时,可以使用简单的`from`关键字,如下所示: ```java String hql = "from Users"; Query ...

    HQL 语法总结 实体查询

    ### HQL语法总结:实体查询详解 #### 一、实体查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种类似于SQL但更接近于面向对象的方式来编写查询。本文将详细介绍HQL中的实体...

    Hibernate hql查询语法总结

    本文将对Hibernate HQL查询语法进行总结,涵盖基础查询、属性查询、实例化查询以及查询链接等多个方面。 1. 基础查询: 基础查询是最简单的HQL语句,用于获取所有`Student`对象。例如: ```java from Student ``` ...

    Hql语句注意事项总结

    在使用Hibernate的HQL(Hibernate Query Language)时,有一些关键的注意事项需要理解并遵循,以确保查询的正确性和效率。以下是对这些要点的详细说明: 1. **在Hql中使用`group by`的问题** - **统计函数与分组**...

    HQL连接查询和注解使用总结

    ### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...

    HQL语法入门学习HQL语法入门学习

    总结来说,HQL是Hibernate中进行对象查询的关键部分,它简化了与数据库的交互,让开发者可以更加专注于业务逻辑而不是底层的数据库操作。通过学习和熟练掌握HQL,可以提高开发效率,使代码更加易于理解和维护。

    HQL实用技术

    ### HQL实用技术详解 #### 一、HQL语言简介 HQL (Hibernate Query ...以上是关于HQL实用技术的相关知识点总结,涵盖了HQL的基本语法、执行流程、参数绑定以及一些高级特性,希望能帮助开发者更好地理解和应用HQL。

    Hibernate HQL查询语句总结.docx

    Hibernate HQL 查询语句总结 Hibernate HQL 查询语句是 Hibernate 框架中的一种查询语言,它提供了更加丰富的和灵活的查询特性,具有类似标准 SQL 语句的查询方式,同时也提供了更加面向对象的封装。以下是 ...

    hibernateHQL关联查询

    #### 六、总结 通过本文的介绍,我们不仅回顾了数据库表连接的基础知识,还深入了解了Hibernate HQL关联查询的实现原理及应用方法。对于开发者而言,掌握HQL关联查询不仅可以提高查询效率,还能让代码更加简洁易懂...

    HibernateUtil分装完整版HQL查询

    **总结** 本教程将详细讲解如何使用HibernateUtil工具类封装HQL查询,从初始化配置到执行查询、管理事务,再到对象的持久化操作,旨在帮助开发者更高效地使用Hibernate进行数据库操作。通过学习这些内容,你可以更...

    HQL批量插入、更新和删除

    #### 五、总结 通过HQL进行批量插入、更新和删除操作是一种高效且简便的方式。合理地利用HQL的特性,结合适当的内存管理和事务控制策略,可以显著提高应用程序的性能和稳定性。同时,在特定场景下选择使用原生SQL也...

    03-HQL实用技术.pdf

    #### 四、总结 通过对以上知识点的学习,可以深入理解HQL在处理不同场景下的应用技巧,特别是关联关系的配置和HQL查询的使用。这些知识不仅有助于提高软件开发的效率,还能提升系统的健壮性和可维护性。

    HQL语法大全,并带有详细的例子

    #### 五、总结 HQL作为一种强大的面向对象查询语言,其灵活性和简洁性使得开发者能够更加高效地进行数据库操作。通过对上述内容的学习,相信你已经对HQL的基本语法和使用有了较为深入的理解。在实际开发中,合理运用...

    HQL语句详解Select/update/deletefromwhere...

    ### 总结 HQL作为一种强大的查询语言,不仅提供了丰富的查询功能,还支持对数据进行更新和删除操作。通过合理使用HQL,可以极大地提高开发效率并简化代码。同时,对于属性查询的支持也使得开发者能够在不获取整个...

    HQL的几钟常见写法

    #### 总结 通过上述几个示例可以看出,HQL提供了非常灵活的方式来查询和操作数据。开发者可以根据实际需求选择合适的查询方式,以提高代码的可读性和维护性。需要注意的是,在编写复杂的多表关联查询时,确保正确...

    HQL.pdf数据查询语句

    总结来说,HQL提供了一种面向对象的数据库查询方式,它抽象了直接对数据库表的查询,让开发者能够以对象的方式操作数据库。通过HQL,开发者可以执行复杂的查询操作,包括基本查询、属性查询、高级查询以及更新和删除...

    hql多表查询

    ### 总结 HQL多表查询是Hibernate框架下高效、灵活地处理数据库多表关联数据的关键技术。通过理解其语法结构和实际应用场景,开发者可以更好地设计和实现复杂的数据查询逻辑,从而提升应用程序的数据处理能力和响应...

    HQL简易介绍(DOC文档)

    总结来说,HQL是Hibernate中用于对象-关系映射查询的强大工具,它简化了与数据库的交互,允许开发者以更面向对象的方式处理数据查询、更新和删除操作,提高了代码的可读性和可维护性。理解并熟练掌握HQL是每个使用...

    Hql多结果集

    #### 七、总结 HQL多结果集查询为开发者提供了强大的查询能力,可以方便地获取到所需的数据。通过灵活运用HQL的查询语法,不仅可以提高查询效率,还能简化代码逻辑,使得程序更加简洁易读。当然,在使用过程中还...

    Hql详解[文].pdf

    总结来说,Hql作为Hibernate的一部分,提供了一种强大的、面向对象的查询方式,它简化了与数据库交互的过程,提高了开发效率。理解并熟练掌握Hql的使用,对于进行高效的ORM编程至关重要。在实际应用中,结合QBC和...

Global site tag (gtag.js) - Google Analytics