`

怎样用hibernate的hql查询查询成map或list

阅读更多

这里制作一个引子,具体内容比较多,而且hibernate文档里的hql篇写的很详细
可以这么用:
List list = getHibernateTemplate().find("select new map(t1.c1,t2.c3) from table1 t1 ,table2 t2 where t1.c1=t2.c2");
这样的话list里的每个元素都是一个map,每个map里包含两个元素
注意:这里的table1和table2都是class名并不是真的表名,毕竟这是hql。除了可以用map还还支持list和自定义的bean。

//HQL-Associations
String hql = "select s.name, p.name, p.price from Product p inner join p.supplier as s";
Query query = session.createQuery(hql);
List results = query.list();


//HQL-Delete
String hql = "delete from Product where name = :name";
Query query = session.createQuery(hql);
query.setString("name","Product 1");
int rowCount = query.executeUpdate();


//HQL-Function
String hql = "select min(product.price), max(product.price) from Product product";
Query query = session.createQuery(hql);
List results = query.list();


//HQL-Fetch Associations HQL Inner Join
String hql = "from Supplier s inner join fetch s.products as p";
Query query = session.createQuery(hql);
List results = query.list();


//HQL-Named Parameters
String hql = "from Product where price > :price";
Query query = session.createQuery(hql);
query.setDouble("price",2.0);
List results = query.list();
String hql = "from Product as product where product.supplier=:supplier";
Query query = session.createQuery(hql);
query.setEntity("supplier",supplier);
List results = query.list();


//HQL-Update
String hql = "update Supplier set name = :newName where name = :name";
Query query = session.createQuery(hql);
query.setString("name","Supplier Name 1");
query.setString("newName","s1");
int rowCount = query.executeUpdate();


//HQL-where
String hql = "from Product where price > 2.0 and name like 'P%'";
Query query = session.createQuery(hql);
List results = query.list();

//HQL-Map
String hql = " select new map(usr.name as userName, usr.password as password) from User usr";
Query query = session.createQuery(hql);
List list = query.list();
Map goods =(Map)list.get(0);

【注】
    String hql = " select new map(usr.name as userName, usr.password as password) from com.jason.User usr";
    String hql = " select new map(usr.name as userName, usr.password as password) from com.jason.User usr";
由于from之前的空格,引起unexpected token:  from



//select new

给一个构建函数:
public class Department(Department d, Integer employeeSize)

然后写成这样:
SELECT new Department(department, count(employee.id)) FROM .....

 

//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了   
120. String hql = " select new map(name,passwd) from Users";   
121. Query query = session.createQuery(hql);   
122. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了   
123. List<Map> list = query.list();   
124. for(Map user : list){   
125. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值   
126. //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了   
127. String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形   
128. String passwd = (String)user.get("1");   
129.   
130. System.out.println(name + " : " + passwd);   
131. }   
132. /**   
133. 输出结果为:   
134. name1 : password1   
135. name2 : password2   
136. name3 : password3   
137. */   
138.//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了   
139. String hql = " select new map(name,passwd) from Users";   
140. Query query = session.createQuery(hql);   
141. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了   
142. List<Map> list = query.list();   
143. for(Map user : list){   
144. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值   
145. //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了   
146. String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形   
147. String passwd = (String)user.get("1");   
148.   
149. System.out.println(name + " : " + passwd);   
150. }   
151. /**   
152. 输出结果为:   
153. name1 : password1   
154. name2 : password2   
155. name3 : password3   
156. */

 

分享到:
评论
1 楼 txy821 2010-11-04  
//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了  
120. String hql = " select new map(name,passwd) from Users";  
121. Query query = session.createQuery(hql);  
122. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了  
123. List<Map> list = query.list();  
124. for(Map user : list){  
125. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值  
126. //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了  
127. String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形  
128. String passwd = (String)user.get("1");  
129.  
130. System.out.println(name + " : " + passwd);  
131. }  
132. /**  
133. 输出结果为:  
134. name1 : password1  
135. name2 : password2  
136. name3 : password3  
137. */  
138.//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了  
139. String hql = " select new map(name,passwd) from Users";  
140. Query query = session.createQuery(hql);  
141. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了  
142. List<Map> list = query.list();  
143. for(Map user : list){  
144. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值  
145. //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了  
146. String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形  
147. String passwd = (String)user.get("1");  
148.  
149. System.out.println(name + " : " + passwd);  
150. }  
151. /**  
152. 输出结果为:  
153. name1 : password1  
154. name2 : password2  
155. name3 : password3  
156. */

相关推荐

    hibernate hql语句 投影查询的三种方式.docx

    在Hibernate框架中,HQL(Hibernate Query Language)是用于操作对象关系映射的查询语言,类似于SQL,但它是面向对象的。本篇文章将详细介绍在Hibernate中进行投影查询的三种主要方式:直接查询、查询返回对象以及...

    HQL查询及语法

    HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理继承、多态等特性,使开发者能够在保持面向...

    hql语句查询

    HQL(Hibernate Query Language)是Hibernate框架中用于查询数据的一种语言。它类似于SQL,但面向对象特性更明显,可以更加灵活地处理复杂的对象图关系。HQL支持基本的查询操作如选择、更新、删除等,并且可以方便地...

    JPA--HQL查询(手动写原生查询sql,复杂查询必备).pdf

    JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向对象的方式查询数据库。HQL 查询是 JPA 中的一种查询...

    Hibernate 参数查询通用方法

    在Hibernate中,参数查询通常涉及到HQL(Hibernate Query Language)或者使用Criteria API。这两种方式都可以实现动态参数查询,即根据传入的参数来构建不同的SQL语句。以下是对这两种方法的详细说明: 1. **HQL...

    hibernate所用到HQL经典语句大全

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员可以更加专注于业务逻辑而非底层数据库的细节。 **1.1 基本查询** - *...

    hibernate实现动态SQL查询

    在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...

    hql查询语言语法

    HQL(Hibernate Query Language)是一种专为Hibernate设计的面向对象的查询语言,它允许开发者使用类名和属性名来进行数据库查询,而无需直接操作SQL语句。这不仅提高了代码的可读性和可维护性,还使得开发工作更加...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    本教程将详细解释如何使用Hibernate将本地SQL查询的结果封装成对象,以便更好地理解和应用这项技术。 1. Hibernate ORM简介: Hibernate是一个开源的ORM框架,它为Java应用程序提供了数据持久化的解决方案。它通过...

    Hibernate与HQL

    - **一对多关联映射**(`one-to-many`):一个实体对应多个实体实例,使用`&lt;list&gt;`、`&lt;set&gt;`、`&lt;bag&gt;`或`&lt;map&gt;`标签进行映射。 - **多对一关联映射**(`many-to-one`):多个实体对应一个实体实例,通常在子类中通过...

    超好用的hibernate查询工具类

    2. **条件查询**:通过传入HQL(Hibernate Query Language)或者Criteria API来实现动态查询。例如`public List&lt;T&gt; findByExample(T exampleEntity)`,可以基于一个实例对象的属性来构建查询条件。 3. **分页查询**...

    hql精点查询语句.doc

    标题和描述均提到了“HQL精点查询语句”,这明确指向了HQL(Hibernate Query Language)在数据库查询中的应用。HQL是Hibernate框架提供的一种面向对象的查询语言,它允许开发人员以面向对象的方式编写数据库查询,而...

    hibernateのHQL

    Hql与Sql 1、HQL是面向对象的,所以HQL与数据库无关 2、HQL最终也会生成SQL,也就是说 HQL使用...d.Map 利用了Map函数,查询两个及两个以上的类属性 d.返回对象 利用了构造函数的形式(Dto) 示例: @Test public void

    Hibernate中分页查询的封装。

    除了Criteria查询,还可以使用HQL(Hibernate Query Language)进行分页查询,HQL是Hibernate提供的面向对象的查询语言,语法类似SQL。以下是一个使用HQL分页查询的例子: ```java String hql = "from User"; Query...

    hibernate3.zip 包含hibernate3.jar

    10. **集合映射**:Hibernate支持多种集合类型(如List、Set、Map等)与数据库表中的多对一、一对多、多对多关系的映射。 11. **事件监听器**:Hibernate允许注册事件监听器,对持久化对象的各种操作(如保存、更新...

    hibernate结构化查询

    在使用Criteria API进行查询时,我们通常会先通过`Session.createCriteria(Class entityClass)`来创建Criteria对象,然后利用`Criteria.add(Expression condition)`添加条件,最后通过`Criteria.list()`或`Criteria....

    hibernate中文参考文档

    6. 集合类映射:在Java中集合是常用的,Hibernate支持集合类的映射,这部分将解释如何映射List、Set、Map等集合类型。 7. 组件映射:当一个类的属性是由其他几个类的属性组合而成时,可以使用组件映射。这部分内容...

    Hibernate SQLQuery执行原生SQL.docx

    在Java的Hibernate框架中,有时候我们需要执行自定义的SQL查询以获取特定的数据,这时就可以使用SQLQuery接口。本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建...

Global site tag (gtag.js) - Google Analytics