`

HQL select 总结

阅读更多
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());   
        }  


转载
分享到:
评论
2 楼 流年已逝_奋斗不止2013 2016-03-01  
很有用,谢谢!
1 楼 hmf_09 2013-10-28  

相关推荐

    HQL 语法总结 实体查询

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

    Hibernate hql查询语法总结

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

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

    ### HQL语句详解:Select/update/delete from where... 在探讨HQL(Hibernate Query Language)时,我们首先要了解它是一种用于Hibernate框架中的查询语言,其语法结构与标准SQL查询语言非常相似,但又针对对象关系...

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query ...总结起来,HQL提供了强大的查询功能,能够满足大多数业务需求。通过合理使用HQL的各种特性,可以编写出高效且易于维护的查询语句。

    Hiberbate hql总结

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

    HQL的几钟常见写法

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

    Hibernate HQL教程

    ### Hibernate HQL 教程知识点总结 #### 1.1 HQL基础 ##### 1.1.1 默认数据库表和数据 - **介绍**: 本文档以`joblog`数据库为例,该数据库包含三个表:`student`(学生表)、`course`(课程表)和`sc`(选课表)。 - **...

    Hibernate HQL查询语句总结.docx

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

    Hql多结果集

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

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

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

    HQL实用技术

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

    hibernateHQL关联查询

    String hql = "SELECT s.stuName, e.examScore FROM Student s RIGHT JOIN Exam e ON s.stuID = e.stuID"; ``` 4. **全外连接(Full Outer Join)**:虽然HQL本身不支持全外连接,但可以通过组合左外连接和右外...

    Hql详解[文].pdf

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

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

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

    Hibernate HQL.txt

    总结来说,Hibernate HQL提供了一种强大的工具,让开发人员能够以面向对象的方式进行数据库查询,从而提高开发效率并简化代码结构。通过本文的介绍,希望能够帮助读者更好地理解和掌握HQL的基本概念及用法。

    HQL.pdf数据查询语句

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

    hql多表查询

    String hql = "select m.leaveTitle, m.leaveContent, r.xm, m.leaveDate from EipLeaveMsg m, EipRyJbxx r, SysUser u " + "where m.leaveUser = u.userid and u.ryid = r.id.ryid"; ``` 在这个查询中,`...

    HQL详解

    HQL在处理关键字时并不区分大小写,这意味着`SELECT`、`SeLeCT`和`sELEct`被视为相同。然而,当涉及到Java类名和属性名时,则需要遵循Java的命名规则,即区分大小写。例如,`org.hibernate.eg.FOO`与`org.hibernate....

    hql批量删除

    总结来说,HQL是Hibernate中一种强大且灵活的查询语言,它能够帮助开发者以面向对象的方式对数据库中的数据进行操作。通过HQL,可以高效地进行批量删除和批量插入数据操作。而在特定场景下,直接使用JDBC API可能会...

    HQL简易介绍(DOC文档)

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

Global site tag (gtag.js) - Google Analytics