`

hibernate select 查询方式总结 (转)

 
阅读更多
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形式返回

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[]数组形式返回,以自定义类型返回

自定义类:

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   
          */     



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());       
         } 

分享到:
评论

相关推荐

    hibernate多表查询详解

    该源代码配了了解释,针对hibernate中多表查询的多种形式进行了总结,很有价值,有Object[]形式的查询,也有对象方式的查询 也有集合list形式的查询,

    Hibernate+中文文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    hibernate总结

    Hibernate的检索方式:(查询/加载) 1. 通过OID加载 session.get(Users.class, 1); * 2. 通过HQL/SQL 检索 hibernate query language (面向对象的查询语言) * a) 不再操纵表,它操纵的是持久化类的对象 b) 面向...

    hibernate3.2中文文档(chm格式)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    HibernateAPI中文版.chm

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate中文详细学习文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate 中文 html 帮助文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 ...

    hibernate 体系结构与配置 参考文档(html)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    Hibernate教程

    15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    hibernate3.04中文文档.chm

    15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by...

    hibernate 框架详解

    15. HQL: Hibernate查询语言 15.1. 大小写敏感性问题 15.2. from子句 15.3. 关联(Association)与连接(Join) 15.4. select子句 15.5. 聚集函数 15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order ...

    Hibernate参考文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9. 表达式 ...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    ARCH4系统开发指南

    2.19.4 总结 45 2.20 金额的JAVA精确计算 45 2.20.1 double型数据不能进行精确计算 45 2.20.2 四舍五入 46 2.20.3 科学记数法 47 2.20.4 java.math.BigDecimal介绍 48 2.20.4.1 BigDecimal的构造方法 48 2.20.4.2 用...

    struts2.1宝典

    11.Struts2自动查询目录下的action 35 12.一个Action处理多个业务 method 35 13.使用校验模板校验 35 14.校验模板 35 15.文件上传 36 Struts2 UI tabbed pane tab pane datetime tree 37 SSH Struts+Spring+...

    NHibernate参考文档 2.0.0 chm

    1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得ISessionFactory 3.3. 用户自行提供ADO.NET连接 3.4....

    Java学习笔记-个人整理的

    {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}...

    NHibernate中文帮组文档(2008.11月更新)

    1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得ISessionFactory 3.3. 用户自行提供ADO.NET连接 3.4....

    计算机专业毕业实习日记.docx

    按照书上的操作把数据文件拷到Mysql安装目录的Data/数据库名 文件夹下,重启MySQL,用客户端连接上,能显示出来有表了,可执行Select语句里就出错了: ERROR 1034 HY000: Incorrect key file for table 'ebs_book';...

Global site tag (gtag.js) - Google Analytics