`

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;

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:

<!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形式返回,<span style="color: red;">但是因为Set里是不允许有重复的元素,所以:username和password的值不能相同。</span>只需将hql改为:String
hql = " select new set(name,passwd) from Users";

 

 

7.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回

自定义类:

package com.domain;
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(所以包名也可以不写),自动导入了

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