1.//查询整个对象
String hql="from Users";
Query query = session.createQuery(hql);
List<Users> users = query.list();
for(Users user: users){
System.out.print(user.getName()+" "+user.getPassword());
}
}

  1. 输出结果为:
  2. name1 : password1 : 1
  3. name2 : password2 : 2
  4. name3 : password3 : 3

2.//查询几个字段
String hql="select name , password from Users";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
//list 存放一个object数组
for(Object[] object: list){
String name =(String)object[0];
String password =(String)object[1];
System.out.print(name+": "+password);
}

  1. 输出结果为:
  2. name1 : password1
  3. name2 : password2
  4. name3 : password3

3.//查询单个字段
String hql="select name from Users";
Query query = session.createQuery(hql);
List<String> list = query.list();
//list 存放一个object数组
for(String object: list){
String name =object;
System.out.print(name);
}

  1. 输出结果为:
  2. name1
  3. name2
  4. name3

4.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回
String hql="select new list(name,password)from Users";
Query query = session.createQuery(hql);
List<List> list = query.list();
for(List user:list){
String name = (String)user.get(0);
String password = (String)user.get(1);
}
System.out.println(name+":"+password)
//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了
//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了

5.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回
String hql="select new map(name,passwd) from Users";
Query query = session.createQuery(hql);
List<Map> map = query.list();
for(Map user: map){
String name = (String)user.get("0");
String password =(String) user.get("1");
System.out.println(name+":"+password)
}

  1. /**
  2. 输出结果为:
  3. name1 : password1
  4. name2 : password2
  5. name3 : password3
  6. */

//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了

//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了

  1. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值
  2. //
    如果将hql改为:String hql = " select new map(name as username,passwd as
    password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了
  3. //get("0");是get(key),注意:0,1,2...是字符串,而不是整形

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

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

自定义类:

  1. package com.domain;
  2. public class MyUser {
  3. private String username;
  4. private String password;
  5. //因为:String hql = " select new com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数
  6. public MyUser(String username,String password){
  7. this.username = username;
  8. this.password = password;
  9. }
  10. public String getUsername() {
  11. return username;
  12. }
  13. public void setUsername(String username) {
  14. this.username = username;
  15. }
  16. public String getPassword() {
  17. return password;
  18. }
  19. public void setPassword(String password) {
  20. this.password = password;
  21. }
  22. }
  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:条件查询

通过setString,setParameter设置参数

  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. }
  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. }
  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. }

Hql查询结果动态组装 List(map),List(bean),List(list),List(set)等格式(转)的更多相关文章

  1. Lambda表达式动态组装查询条件

    最近比较闲,年底了,项目也进入尾声:每天就是维护一下系统,整理整理文档,整理知识点,这样才觉得有点意思: 问题 在使用Linq的where()查询的时候,不知道大家是怎么动态组装多个查询条件时,是怎么 ...

  2. MyBatis学习总结(三)——多表关联查询与动态SQL

    在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...

  3. ibatis 中动态SQL查询和动态标签嵌套的使用

    ibatis 动态查询对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解 ...

  4. Java 实现简单的SQL动态组装工具类

    第一版 package com.zh.oukele.util; import java.util.HashMap; import java.util.Iterator; import java.uti ...

  5. Hibernate--------八大类HQL查询集合

    Hibernate的   八大类HQL查询集合 Hibernate的八大类HQL查询集合: 一:属性查询(SimplePropertyQuery) 1,单一属性查询 *返回结果集属性列表,元素类型和实 ...

  6. hibernate学习(7)——HQL查询

    1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...

  7. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  8. 转: Hibernate HQL查询 插入 更新(update)实例

    1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...

  9. 第六讲(二) Hibernate HQL查询

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...

随机推荐

  1. Leetcode 27 Remove Element STL

    和remove zero类似的方法完成该题 class Solution { public: int removeElement(vector<int>& nums, int va ...

  2. 懂DOS终于发挥了一点作用:phoenix bios密码破解

    手上一个笔记本,不知开机密码,但bios是老phoenix的bios,出错后有溢出码,到网上下载了一个unlock6,满怀希望地进行破解,结果一运行,屏幕就没反应.试了几个都不行.最后怀疑是不是输出的 ...

  3. Android中解决图像解码导致的OOM问题

    Android中解决图像解码导致的OOM问题 原文链接:http://blog.csdn.net/zjl5211314/article/details/7042017

  4. Docker实践(5)—资源隔离

    Docker使用cgroup实现CPU,内存和磁盘IO等系统资源的限制. CPU Docker现在有2个与CPU资源相关的参数,-c可以指定CPU的占比,--cpuset可以绑定CPU.例如,指定容器 ...

  5. COM是一个更好的C++

    昨天看了<COM本质论>的第一章”COM是一个更好的C++”,觉得很有必要做一些笔记,于是整理成这篇文章,我相信你值得拥有. 这篇文章主要讲的内容是:一个实现了快速查找功能的类FastSt ...

  6. JAVA自动化测试中多数据源的切换

    在做自动化测试时,数据驱动是一个很重要的概念,当数据与脚本分离后,面对茫茫多的数据,管理数据又成了一个大问题,而数据源又可能面对多个,就跟在开发过程中,有时候要连接MYSQL,有时候又要连接SQL S ...

  7. 持续集成工具Hudson安装实例

    安装maven 下载maven,解压 [root@localhost local]# pwd /usr/local [root@localhost local]# -bin.tar.gz [root@ ...

  8. Codeforces Round #385 (Div. 2) B - Hongcow Solves A Puzzle 暴力

    B - Hongcow Solves A Puzzle 题目连接: http://codeforces.com/contest/745/problem/B Description Hongcow li ...

  9. 记录一下,如何配置nodejs nginx的反向代理

    本文是在mac下配置nodejs 在nginx下的反向代理 1.安装nodejs,之前就安装了. 2.安装nginx ,我采用的直接源码安装 3.进入 /usr/local/nginx/conf 目录 ...

  10. WPF 创建桌面快捷方式

    #region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...