hibernate HQL总结

FROM:http://kuangbaoxu.javaeye.com/blog/193076
  1. hibernate------hql总结
  2. 关键字: hibernate------hql总结 
  3. 1. 查询整个映射对象所有字段 
  4. //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段      
  5.         String hql = "from Users";      
  6.         Query query = session.createQuery(hql);      
  7.               
  8.         List<Users> users = query.list();      
  9.         for(Users user : users){      
  10.             System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());      
  11.         }      
  12.      
  13.  输出结果为:      
  14. name1 : password1 : 1     
  15. name2 : password2 : 2     
  16. name3 : password3 : 3    
  17. 2.查询单个字段  
  18. //查询单个字段      
  19.         String hql = " select name from Users";      
  20.         Query query = session.createQuery(hql);      
  21.               
  22.         List<String> list = query.list();      
  23.         for(String str : list){      
  24.             System.out.println(str);      
  25.         }      
  26. 输出结果为:      
  27. name1      
  28. name2      
  29. name3    
  30. 3.查询其中几个字段 
  31.   
  32. //查询其中几个字段      
  33.         String hql = " select name,passwd from Users";      
  34.         Query query = session.createQuery(hql);      
  35.         //默认查询出来的list里存放的是一个Object数组      
  36.         List<Object[]> list = query.list();      
  37.         for(Object[] object : list){      
  38.             String name = (String)object[0];      
  39.             String passwd = (String)object[1];      
  40.                   
  41.             System.out.println(name + " : " + passwd);      
  42.         }      
  43. 输出结果为:      
  44. name1 : password1      
  45. name2 : password2      
  46. name3 : password3    
  47. 4.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回引用
  48. //查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集了   
  49.         String hql = " select new list(name,passwd) from Users";   
  50.         Query query = session.createQuery(hql);   
  51.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了   
  52.         List<List> list = query.list();   
  53.         for(List user : list){   
  54.             String name = (String)user.get(0);   
  55.             String passwd = (String)user.get(1);   
  56.                
  57.             System.out.println(name + " : " + passwd);   
  58.         }   
  59.         /**  
  60.         输出结果为:  
  61.          name1 : password1  
  62.         name2 : password2  
  63.         name3 : password3  
  64.          */  
  65. 5.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回 
  66. //查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了      
  67.         String hql = " select new map(name,passwd) from Users";      
  68.         Query query = session.createQuery(hql);      
  69.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了      
  70.         List<Map> list = query.list();      
  71.         for(Map user : list){      
  72.             //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值      
  73.             //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了      
  74.             String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形      
  75.             String passwd = (String)user.get("1");      
  76.                   
  77.             System.out.println(name + " : " + passwd);      
  78.         }      
  79.         /**    
  80.         输出结果为:    
  81.          name1 : password1    
  82.         name2 : password2    
  83.         name3 : password3    
  84.          */    
  85. 6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重复的元素,所以:username和password的值不能相同。只需将hql改为:String hql = " select new set(name,passwd) from Users"
  86. 7.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回 
  87. 自定义类: 
  88.   
  89. package com.domain;      
  90.      
  91. public class MyUser {      
  92.      
  93.     private String username;      
  94.     private String password;      
  95. //因为:String hql = " select new  com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数      
  96.     public MyUser(String username,String password){      
  97.         this.username = username;      
  98.         this.password = password;      
  99.     }      
  100.           
  101.     public String getUsername() {      
  102.         return username;      
  103.     }      
  104.     public void setUsername(String username) {      
  105.         this.username = username;      
  106.     }      
  107.     public String getPassword() {      
  108.         return password;      
  109.     }      
  110.     public void setPassword(String password) {      
  111.         this.password = password;      
  112.     }      
  113.           
  114.           
  115. }    
  116.        
  117.   
  118. //通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包名,String hql = "from Users";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里<hibernate-mapping auto-import="true"> auto-import默认值为true(所以auto-import属性也可以不写),自动导入了      
  119.         String hql = " select new  com.domain.MyUser(name,passwd) from Users";      
  120.         Query query = session.createQuery(hql);      
  121.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了      
  122.         List<MyUser> myUsers = query.list();      
  123.         for(MyUser myUser : myUsers){      
  124.             String name = myUser.getUsername();      
  125.             String passwd = myUser.getPassword();      
  126.             System.out.println(name + " : " + passwd);      
  127.         }      
  128.         /**    
  129.         输出结果为:    
  130.         name1 : password1    
  131.         name2 : password2    
  132.         name3 : password3    
  133.          */    
  134. 8:条件查询 
  135. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数      
  136.         String hql = "from Users where name=? and passwd=?";      
  137.         Query query = session.createQuery(hql);      
  138.         //第1种方式      
  139. //      query.setString(0, "name1");      
  140. //      query.setString(1, "password1");      
  141.         //第2种方式      
  142.         query.setParameter(0"name1",Hibernate.STRING);      
  143.         query.setParameter(1"password1",Hibernate.STRING);      
  144.         List<Users> list = query.list();      
  145.         for(Users users : list){      
  146.             System.out.println(users.getId());      
  147.         }     
  148.           
  149. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数      
  150.         String hql = "from Users where name=:username and passwd=:password";      
  151.         Query query = session.createQuery(hql);      
  152.         //第1种方式      
  153. //      query.setString("username", "name1");      
  154. //      query.setString("password", "password1");      
  155.         //第2种方式,第3个参数确定类型      
  156.         query.setParameter("username""name1",Hibernate.STRING);      
  157.         query.setParameter("password""password1",Hibernate.STRING);      
  158.         List<Users> list = query.list();      
  159.         for(Users users : list){      
  160.             System.out.println(users.getId());      
  161.         }    
  162. //条件查询,通过setProperties设置参数      
  163.         String hql = "from Users where name=:username and passwd=:password";      
  164.         Query query = session.createQuery(hql);      
  165.         //MyUser类的2个属性必须和:username和:password对应      
  166.         MyUser myUser = new MyUser("name1","password1");      
  167.         query.setProperties(myUser);      
  168.         List<Users> list = query.list();      
  169.         for(Users users : list){      
  170.             System.out.println(users.getId());      
  171.         }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值