`

Hibernate各种条件查询汇总

阅读更多

1. 查询整个映射对象所有字段 
Java代码     
//直接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.查询单个字段  
Java代码     
//查询单个字段      
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.查询其中几个字段 
  
Java代码     
//查询其中几个字段      
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形式返回 
Java代码     
//查询其中几个字段,添加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[]数组形式返回,以自定义类型返回
自定义类: 

Java代码     
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;      
 }      
}    


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";     
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:条件查询 
Java代码     
//条件查询,参数索引值从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());      
}     

Java代码     
//条件查询,自定义索引名(参数名):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());      
}    

Java代码     
//条件查询,通过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());      
}

 

 

 

4
0
分享到:
评论

相关推荐

    Hibernate_query聚合函数查询.

    本篇主要探讨的是Hibernate对数据库查询中聚合函数的应用,这些功能使我们能够高效地处理数据统计和汇总任务。在学习过程中,我们经常会遇到诸如求和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)以及计数...

    Hibernate持久层方法汇总

    这种方法比较灵活,支持复杂的查询条件和关联操作。 3. `session.iterator()`: - `iterator()`方法用于迭代查询结果。它返回一个实现了Iterator接口的对象,可以按需逐个处理查询结果,尤其适用于大数据量的查询...

    2022年Hibernate常见面试题汇总.doc

    - QBC(Query By Criteria):基于字符串的查询,封装了复杂的查询条件,适用于用户输入查询条件的情况。 - 当地SQL查询:直接执行SQL语句。 3. **检索策略**: - 立即检索:对象在需要时立即加载。 - 延迟检索...

    java之hibernate和spring技术难点及其要点总结

    - **Java排序算法汇总**:了解并熟练掌握各种排序算法对于提高算法设计能力很有帮助。 - **Java并发控制**:学习如何正确地使用并发工具类(如`Volatile`、`ReentrantLock`等)来构建安全的多线程应用。 - **Java...

    Hibernate HQL.txt

    根据提供的文件信息,我们可以深入探讨Hibernate HQL(Hibernate Query Language)的相关知识点,特别是关于其查询功能、连接操作、条件过滤以及聚合函数的应用等。 ### Hibernate HQL简介 Hibernate HQL是一种...

    Hibernate_API_zh-cn高手汇总

    1. Criteria API:通过Criteria对象构建查询条件,支持动态查询,方便灵活。 2. HQL:面向对象的查询语言,类似SQL,但操作的是对象和集合。 3. Native SQL:直接使用SQL查询,适用于复杂或性能要求高的场景。 六、...

    Hibernate

    7. ** Criteria 查询**:Criteria API 提供了一种更动态、类型安全的方式来构建查询,相比HQL,它更灵活,可以直接在运行时构造查询条件。 8. ** Criteria Expressions 和 Projections**:Criteria 查询可以利用...

    hibernate3.6 文档(pdf 格式)

    - **查询缓存**:展示如何配置 Hibernate 的查询缓存以提高查询性能。 - **理解集合性能**:解释如何优化集合的加载和更新性能。 - **性能监控**:介绍如何监控 Hibernate 的性能指标。 #### 二十二、工具包指南 - ...

    查询和并发

    本篇将详细探讨"查询和并发"这一主题,结合`hibernate_06_hql`、`hibernate_07_criteria`及`hb_08_concurrencycontrol`这三部分内容,我们将深入理解Hibernate中的HQL查询、Criteria查询以及并发控制策略。...

    利用MyBatis实现条件查询的方法汇总

    MyBatis实现条件查询方法汇总 MyBatis是一种基于Java的持久层框架,它提供了强大的SQL映射功能,能够减少代码量,提高开发效率。下面是MyBatis实现条件查询的相关知识点总结: 1. Mapper配置: MyBatis的Mapper配置...

    办公系统源代码(sturts2,hibernate,mysql)

    多搜索查询匹配条件按年对本年内每个月的费用情况进行汇总,使部门对部门内每个员工的费用情况时刻清楚; (3)分类费用汇总 费用添加是按照不同性质分类进行增删改查,分类费用汇总可以对每个部门的费用按分类进行...

    基于ssh的工会管理系统多条件查询ssh+mysql+maven

    多条件查询是系统的重要功能之一,允许用户根据不同的字段如工会名称、收支类型、日期等进行组合查询,以便更准确地获取所需信息。这通常涉及SQL的WHERE子句和可能的JOIN操作,以满足不同查询场景的需求。 【资金...

    办公管理系统

    多搜索查询匹配条件按年对本年内每个月的费用情况进行汇总,使部门对部门内每个员工的费用情况时刻清楚; (3)分类费用汇总 费用添加是按照不同性质分类进行增删改查,分类费用汇总可以对每个部门的费用按分类进行...

    JAVA 面试题汇总

    【JAVA 面试题汇总】是一份集合了各种JAVA面试常见问题的资料,涵盖了核心JAVA、面向对象设计与UML、XML、SQL、JDBC、Hibernate、Web技术、EJB、Spring、数据结构与算法、计算机基础知识以及C++等多个方面。...

    ssh框架需要的jar包汇总

    2. **hibernate3.jar**:这是Hibernate ORM(Object-Relational Mapping,对象关系映射)框架的主要库,用于将Java对象与数据库表进行映射,简化数据库操作,提供缓存机制和查询语言HQL。 3. **aspectjweaver.jar**...

    mybatis面试题汇总.pdf

    MyBatis通过将SQL语句分离到XML映射文件中,解决了这一问题,同时通过动态SQL支持,可以更便捷地处理不同的查询条件。此外,MyBatis自动将结果集映射到Java对象,减少了手动解析的结果集处理。 MyBatis的优点包括:...

    java分页技术汇总

    而`HQL`分页则在查询语句中直接包含`FROM`后的查询条件,如`SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ?, ?`。 5. **MyBatis分页**: MyBatis可以通过动态SQL实现分页,同样有`LIMIT`和`OFFSET`方式,...

    八股文知识点汇总-各互联网大厂java工程师面试题.pdf

    全自动化 ORM 框架如 Hibernate 有何区别? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地...

    java ee 面试题总结

    当Hibernate查询数据时,并不立即将所有数据加载到内存中;而是等到程序真正需要访问这些数据时,才从数据库中加载,这样可以显著减少服务器内存的占用。 #### 三、Hibernate中类间关系的实现 - **一对多关系**:...

Global site tag (gtag.js) - Google Analytics