`
jinchun1223
  • 浏览: 259032 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

hql查询

阅读更多

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    
         */    
//通过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());      
       }   

 

分享到:
评论

相关推荐

    HQL查询及语法

    ### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...

    HQL查询pdf资料

    ### HQL查询详解 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型...

    SSH笔记-HQL查询、QBC、本地SQL查询

    SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询

    Hibernate HQL查询 分页查询 模糊查询.docx

    这里的关键点在于使用`createQuery`方法创建了一个HQL查询对象,并通过`setString`方法设置参数值,最后通过`list`方法执行查询并获取结果列表。 #### 三、分页查询 分页查询在处理大量数据时非常有用,可以有效地...

    HQL查询语言基础知识

    HQL 查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,用于在 Hibernate 框架中查询数据库。HQL 查询语言基础知识是 Hibernate 中的基础组件之一,对于开发人员来说,掌握 HQL 查询语言...

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

    JPA--HQL查询(手动写原生查询sql,复杂查询必备) JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向...

    HibernateUtil分装完整版HQL查询

    标题"HibernateUtil分装完整版HQL查询"暗示了这是一个关于使用HibernateUtil工具类来封装和执行HQL(Hibernate Query Language)查询的教程或代码示例。描述中的重复信息进一步强调了这个主题,意味着我们将探讨如何...

    HQL查询语言基础.

    **HQL查询语言基础** HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似,但专为面向对象编程设计。HQL允许开发者以类和对象的方式编写查询,而不是直接处理...

    Hibernate之HQL查询

    HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构分离。 **1. HQL的基本语法** HQL查询语句结构通常包括以下几个部分:`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`。...

    hibernate 查询?Hibernate的HQL查询

    【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...

    HQL查询.ppt

    HQL查询 帮助文档

    Hibernate hql查询语法总结

    《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...

    常用易懂,易会HQL查询

    本文将深入探讨“常用易懂,易会”的HQL查询,帮助你快速上手并熟练掌握这一技能。 1. **HQL基础概念** HQL是Hibernate提供的面向对象的查询语言,与SQL类似,但更加面向对象,减少了数据库方言的差异,提高了代码...

    第三章HQL查询

    HQL查询

    HQL 查询语言基础 二

    在HQL查询语言中,`FROM`子句用于指定查询数据来源的实体或表。例如: ```hql FROM Person as p ``` 这里的`Person`表示的是一个持久化类,即ORM映射中的实体类。`as p`则定义了一个别名`p`,方便后续在查询语句中...

    Hibernate注解方式、HQL查询

    在实际项目中,结合Hibernate的注解方式和HQL查询,开发者可以高效地处理数据库操作,降低了SQL编写的工作量,提高了代码的可读性和可维护性。同时,Hibernate还提供了Criteria API和Querydsl等其他查询方式,提供了...

    Hibernate HQL查询.docx

    ### Hibernate HQL 查询详解 #### 一、HQL 概述 Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性...

    超级详细的hql查询语句教程

    ### HQL查询语句详解 #### 一、HQL简介 Hibernate Query Language(HQL)是一种面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的设计旨在更好地支持面向对象编程特性,比如继承、多态以及关联等概念。...

    06_传智播客hibernate教程_完善HibernateUtil类及hql查询入门

    本教程聚焦于“完善HibernateUtil类及HQL查询入门”,让我们深入探讨这两个关键概念。 首先,`HibernateUtil` 类是 Hibernate 教程中常见的一种工具类,它的主要作用是提供对 Hibernate 框架的简单封装,以方便进行...

Global site tag (gtag.js) - Google Analytics