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());
}
相关推荐
本篇主要探讨的是Hibernate对数据库查询中聚合函数的应用,这些功能使我们能够高效地处理数据统计和汇总任务。在学习过程中,我们经常会遇到诸如求和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)以及计数...
这种方法比较灵活,支持复杂的查询条件和关联操作。 3. `session.iterator()`: - `iterator()`方法用于迭代查询结果。它返回一个实现了Iterator接口的对象,可以按需逐个处理查询结果,尤其适用于大数据量的查询...
- QBC(Query By Criteria):基于字符串的查询,封装了复杂的查询条件,适用于用户输入查询条件的情况。 - 当地SQL查询:直接执行SQL语句。 3. **检索策略**: - 立即检索:对象在需要时立即加载。 - 延迟检索...
- **Java排序算法汇总**:了解并熟练掌握各种排序算法对于提高算法设计能力很有帮助。 - **Java并发控制**:学习如何正确地使用并发工具类(如`Volatile`、`ReentrantLock`等)来构建安全的多线程应用。 - **Java...
根据提供的文件信息,我们可以深入探讨Hibernate HQL(Hibernate Query Language)的相关知识点,特别是关于其查询功能、连接操作、条件过滤以及聚合函数的应用等。 ### Hibernate HQL简介 Hibernate HQL是一种...
1. Criteria API:通过Criteria对象构建查询条件,支持动态查询,方便灵活。 2. HQL:面向对象的查询语言,类似SQL,但操作的是对象和集合。 3. Native SQL:直接使用SQL查询,适用于复杂或性能要求高的场景。 六、...
7. ** Criteria 查询**:Criteria API 提供了一种更动态、类型安全的方式来构建查询,相比HQL,它更灵活,可以直接在运行时构造查询条件。 8. ** Criteria Expressions 和 Projections**:Criteria 查询可以利用...
- **查询缓存**:展示如何配置 Hibernate 的查询缓存以提高查询性能。 - **理解集合性能**:解释如何优化集合的加载和更新性能。 - **性能监控**:介绍如何监控 Hibernate 的性能指标。 #### 二十二、工具包指南 - ...
本篇将详细探讨"查询和并发"这一主题,结合`hibernate_06_hql`、`hibernate_07_criteria`及`hb_08_concurrencycontrol`这三部分内容,我们将深入理解Hibernate中的HQL查询、Criteria查询以及并发控制策略。...
MyBatis实现条件查询方法汇总 MyBatis是一种基于Java的持久层框架,它提供了强大的SQL映射功能,能够减少代码量,提高开发效率。下面是MyBatis实现条件查询的相关知识点总结: 1. Mapper配置: MyBatis的Mapper配置...
多搜索查询匹配条件按年对本年内每个月的费用情况进行汇总,使部门对部门内每个员工的费用情况时刻清楚; (3)分类费用汇总 费用添加是按照不同性质分类进行增删改查,分类费用汇总可以对每个部门的费用按分类进行...
多条件查询是系统的重要功能之一,允许用户根据不同的字段如工会名称、收支类型、日期等进行组合查询,以便更准确地获取所需信息。这通常涉及SQL的WHERE子句和可能的JOIN操作,以满足不同查询场景的需求。 【资金...
多搜索查询匹配条件按年对本年内每个月的费用情况进行汇总,使部门对部门内每个员工的费用情况时刻清楚; (3)分类费用汇总 费用添加是按照不同性质分类进行增删改查,分类费用汇总可以对每个部门的费用按分类进行...
【JAVA 面试题汇总】是一份集合了各种JAVA面试常见问题的资料,涵盖了核心JAVA、面向对象设计与UML、XML、SQL、JDBC、Hibernate、Web技术、EJB、Spring、数据结构与算法、计算机基础知识以及C++等多个方面。...
2. **hibernate3.jar**:这是Hibernate ORM(Object-Relational Mapping,对象关系映射)框架的主要库,用于将Java对象与数据库表进行映射,简化数据库操作,提供缓存机制和查询语言HQL。 3. **aspectjweaver.jar**...
MyBatis通过将SQL语句分离到XML映射文件中,解决了这一问题,同时通过动态SQL支持,可以更便捷地处理不同的查询条件。此外,MyBatis自动将结果集映射到Java对象,减少了手动解析的结果集处理。 MyBatis的优点包括:...
而`HQL`分页则在查询语句中直接包含`FROM`后的查询条件,如`SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ?, ?`。 5. **MyBatis分页**: MyBatis可以通过动态SQL实现分页,同样有`LIMIT`和`OFFSET`方式,...
全自动化 ORM 框架如 Hibernate 有何区别? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地...
当Hibernate查询数据时,并不立即将所有数据加载到内存中;而是等到程序真正需要访问这些数据时,才从数据库中加载,这样可以显著减少服务器内存的占用。 #### 三、Hibernate中类间关系的实现 - **一对多关系**:...