`
tonysmith
  • 浏览: 175040 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate hql 总结(转)

阅读更多

1. 查询整个映射对象所有字段 
Java代码 
  1. //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段      
  2.         String hql = "from Users" ;     
  3.         Query query = session.createQuery(hql);     
  4.              
  5.         List<Users> users = query.list();     
  6.         for (Users user : users){     
  7.             System.out.println(user.getName() + " : "  + user.getPasswd() +  " : "  + user.getId());     
  8.         }     
  9.     
  10.  输出结果为:     
  11. name1 : password1 : 1     
  12. name2 : password2 : 2     
  13. name3 : password3 : 3     


2.查询单个字段  
Java代码 
  1. //查询单个字段      
  2.         String hql = " select name from Users" ;     
  3.         Query query = session.createQuery(hql);     
  4.              
  5.         List<String> list = query.list();     
  6.         for (String str : list){     
  7.             System.out.println(str);     
  8.         }     
  9. 输出结果为:     
  10. name1     
  11. name2     
  12. name3    


3.查询其中几个字段 
  
Java代码 
  1. //查询其中几个字段      
  2.         String hql = " select name,passwd from Users" ;     
  3.         Query query = session.createQuery(hql);     
  4.         //默认查询出来的list里存放的是一个Object数组      
  5.         List<Object[]> list = query.list();     
  6.         for (Object[] object : list){     
  7.             String name = (String)object[0 ];     
  8.             String passwd = (String)object[1 ];     
  9.                  
  10.             System.out.println(name + " : "  + passwd);     
  11.         }     
  12. 输出结果为:     
  13. name1 : password1     
  14. name2 : password2     
  15. 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形式返回 
Java代码 
  1. //查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了      
  2.         String hql = " select new map(name,passwd) from Users" ;     
  3.         Query query = session.createQuery(hql);     
  4.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了      
  5.         List<Map> list = query.list();     
  6.         for (Map user : list){     
  7.             //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值      
  8.             // 如果将hql改 为:String hql = " select new map(name as username,passwd as password) from Users";, 那么key将不是字符串0,1,2...了,而是"username","password"了      
  9.             String name = (String)user.get("0" ); //get("0");是get(key),注意:0,1,2...是字符串,而不是整形      
  10.             String passwd = (String)user.get("1" );     
  11.                  
  12.             System.out.println(name + " : "  + passwd);     
  13.         }     
  14.         /**    
  15.         输出结果为:    
  16.          name1 : password1    
  17.         name2 : password2    
  18.         name3 : password3    
  19.          */     

6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重复的元素,所 以:username和password的值不能相同。只需将hql改为:String hql = " select new set(name,passwd) from Users"; 

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

自定义类: 
  
Java代码 
  1. package  com.domain;     
  2.     
  3. public   class  MyUser {     
  4.     
  5.     private  String username;     
  6.     private  String password;     
  7. //因为:String hql = " select new  com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数      
  8.     public  MyUser(String username,String password){     
  9.         this .username = username;     
  10.         this .password = password;     
  11.     }     
  12.          
  13.     public  String getUsername() {     
  14.         return  username;     
  15.     }     
  16.     public   void  setUsername(String username) {     
  17.         this .username = username;     
  18.     }     
  19.     public  String getPassword() {     
  20.         return  password;     
  21.     }     
  22.     public   void  setPassword(String password) {     
  23.         this .password = password;     
  24.     }     
  25.          
  26.          
  27. }    


  
Java代码 
  1. // 通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包 名,String hql = "from Users";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里< hibernate-mapping auto-import="true"> auto-import默认值为true(所以auto- import属性也可以不写),自动导入了      
  2.         String hql = " select new  com.domain.MyUser(name,passwd) from Users" ;     
  3.         Query query = session.createQuery(hql);     
  4.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了      
  5.         List<MyUser> myUsers = query.list();     
  6.         for (MyUser myUser : myUsers){     
  7.             String name = myUser.getUsername();     
  8.             String passwd = myUser.getPassword();     
  9.             System.out.println(name + " : "  + passwd);     
  10.         }     
  11.         /**    
  12.         输出结果为:    
  13.         name1 : password1    
  14.         name2 : password2    
  15.         name3 : password3    
  16.          */     


8:条件查询 
Java代码 
  1. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数      
  2.         String hql = "from Users where name=? and passwd=?" ;     
  3.         Query query = session.createQuery(hql);     
  4.         //第1种方式      
  5. //      query.setString(0, "name1");      
  6. //      query.setString(1, "password1");      
  7.         //第2种方式      
  8.         query.setParameter(0 "name1" ,Hibernate.STRING);     
  9.         query.setParameter(1 "password1" ,Hibernate.STRING);     
  10.         List<Users> list = query.list();     
  11.         for (Users users : list){     
  12.             System.out.println(users.getId());     
  13.         }     
          
Java代码 
  1. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数      
  2.         String hql = "from Users where name=:username and passwd=:password" ;     
  3.         Query query = session.createQuery(hql);     
  4.         //第1种方式      
  5. //      query.setString("username", "name1");      
  6. //      query.setString("password", "password1");      
  7.         //第2种方式,第3个参数确定类型      
  8.         query.setParameter("username" "name1" ,Hibernate.STRING);     
  9.         query.setParameter("password" "password1" ,Hibernate.STRING);     
  10.         List<Users> list = query.list();     
  11.         for (Users users : list){     
  12.             System.out.println(users.getId());     
  13.         }    


Java代码 
  1. //条件查询,通过setProperties设置参数      
  2.         String hql = "from Users where name=:username and passwd=:password" ;     
  3.         Query query = session.createQuery(hql);     
  4.         //MyUser类的2个属性必须和:username和:password对应      
  5.         MyUser myUser = new  MyUser( "name1" , "password1" );     
  6.         query.setProperties(myUser);     
  7.         List<Users> list = query.list();     
  8.         for (Users users : list){     
  9.             System.out.println(users.getId());     
  10.         }    
分享到:
评论

相关推荐

    Hibernate hql查询语法总结

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

    hibernateHQL关联查询

    ### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...

    Hibernate HQL查询语句总结.docx

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

    Hibernate HQL.txt

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

    hibernate hql基本操作

    ### Hibernate HQL 基本操作详解 #### 一、HQL简介 HQL,即Hibernate Query Language,是Hibernate提供的一种强大的查询语言。虽然它的语法结构看起来与SQL类似,但其实质上是一种面向对象的语言,能够理解并处理...

    weblogic12 下 org.hibernate.hql.ast.HqlToken

    ### WebLogic 12下org.hibernate.hql.ast.HqlToken冲突解决方案 在使用WebLogic 12部署应用程序时,可能会遇到与`org.hibernate.hql.ast.HqlToken`相关的异常问题。这种异常通常与Hibernate版本之间的不兼容性有关...

    hibernateHQL基本查询

    ### Hibernate HQL 基本查询详解 #### 一、HQL 概述 HQL (Hibernate Query Language) 是一种面向对象的查询语言,由 Hibernate 官方提供,用于简化数据库查询过程。与传统的 JDBC 方式相比,使用 HQL 进行数据库...

    hibernate hql各类查询范例

    以上内容涉及了使用 HQL 和 DetachedCriteria 进行查询、参数化查询、执行更新操作以及简单的统计查询等常见的 Hibernate 操作。这些知识点对于理解和掌握 Hibernate 框架的基本使用至关重要,同时也是开发基于 ...

    Hibernate HQL查询.docx

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

    Hibernate HQL命名参数和Query接口的分页

    总结起来,熟练掌握Hibernate HQL的命名参数和Query接口的分页查询是提高数据操作效率的关键。同时,注意处理可能出现的数据库关键字冲突问题,确保ORM映射的正确性。通过这些技巧,开发者可以更好地控制和优化...

    HibernateHQL级联注意事项[归类].pdf

    总结,掌握Hibernate HQL级联查询的关键在于理解数据库模型、Java对象和映射文件之间的关系,以及如何在HQL中正确表达这些关系,从而实现高效的数据库操作。在实际开发中,应合理利用级联查询的优势,同时注意其可能...

    Hibernate HQL精华

    总结,Hibernate HQL是Java开发者处理数据库查询的强大工具,它提供了一种面向对象的方式来表达SQL查询,使代码更加可读且易于维护。通过理解并熟练掌握HQL,可以显著提高开发效率,更好地利用Hibernate框架的潜力。

    Hibernate-HQL语句多对多写法

    "Hibernate-HQL语句多对多写法" Hibernate 是一个流行的 Java 持久层框架,它提供了强大的对象...总结来说,Hibernate 的 HQL 语言提供了强大的查询功能,可以方便地检索和操作数据,特别是在多对多关系的情况下。

    Hibernate知识点总结

    ### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...

    hibernate 查询?Hibernate的HQL查询

    总结,Hibernate的HQL查询为开发者提供了强大且灵活的数据检索方式,使得在Java应用中操作数据库变得更加简单,同时提高了代码的可读性和可维护性。在实际开发中,熟练掌握HQL能极大地提升工作效率,特别是在处理...

    hibernate学习总结文档

    2. **读取(Read)**:`get()` 或 `load()` 方法用于根据主键获取对象,`query()` 或 HQL(Hibernate 查询语言)用于执行更复杂的查询。 3. **更新(Update)**:修改对象后,调用 `update()` 或 `merge()` 方法同步...

    Hibernate HQL教程

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

    HIBERNATE HQL

    ### HQL:Hibernate 查询语言详解 #### 一、引言 HQL,即Hibernate Query Language,是Hibernate框架中的一种强大且灵活的查询语言。虽然它的语法看起来与SQL类似,但其实质上是一种面向对象的语言,能够很好地...

    Hibernate_HQL大全

    ### Hibernate_HQL大全详解 #### 一、HQL概述 HQL,即Hibernate Query Language,是一种强大且面向对象的查询语言,由Hibernate框架提供。尽管HQL的语法结构与SQL相似,但其设计理念完全不同,HQL是专门为面向对象...

Global site tag (gtag.js) - Google Analytics