Hibernate中HQL语句的使用

来源:互联网 发布:仁化县网络问政回复 编辑:程序博客网 时间:2024/05/12 03:46
HQL:Hibernate Query Language 简单属性查询: 
//返回结果集属性列表,元素类型和实体类中的属性类型一致 
List students = session.createQuery("select name from Student").list(); 
 
多个属性的查询: 
//查询多个属性,返回对象数组集合 
List students = session.createQuery("select id, name from Student").list(); 
 
多个属性查询,返回对象: 
List students = session.createQuery("select new Student(id, name) from Student").list();  
使用别名: 
List students = session.createQuery("select s.id, s.name from Student s").list();  
实体对象查询: 
List students = session.createQuery("from Student").list(); 
List students = session.createQuery("select s from Student s").list(); 
不支持select * from这种语法  
外置命名查询: 
在student.hbm.xml文件中添加: 
 <query name="queryStudent">   <![CDATA[    
select s from Student s where s.id <?   
]]> 
 </query>  
List students = session.getNamedQuery("queryStudent") 
         .setParameter(0, 10)  
 
 
 
 
 
 
 
 
.list(); 
 
查询过滤器: 
在student.hbm.xml中添加: 
 <class ...>   ... 
  
<filter name="testFilter" condition="id &lt; :myid"></filter> 
 </class> 
 <filter-def name="testFilter">   
<filter-param type="integer" name="myid"/>  </filter-def> 
 








       var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);    














session.enableFilter("testFilter")   
.setParameter("myid", 10); 
List students = session.createQuery("from Student").list(); 
 
分页查询:    List students = session.createQuery("from Student")       .setFirstResult(1)       .setMaxResults(2)   
 
 
 
 
.list(); 
 
对象导航查询: 
List students = session.createQuery("from Student s where 
s.classes.name like '%2%'") 
  
 
 
 
 
.list(); 
 
连接查询: 
常用的是内连接,外连接(左连接/右连接); 
内连接:返回的是对象数组    List students = session.createQuery("select c.name, s.name from Student s join s.classes c")     
 
 
.list(); 
  
 
Object[] obj = (Object[])iter.next(); 
 
左外连:    List students = session.createQuery("select c.name, s.name 
from Student s left join s.classes c") 
 
左外连:    List students = session.createQuery("select c.name, s.name from Student s right join s.classes c") 
  
 
 
 
 
.list(); 
 
统计查询:    Long count = (Long)session.createQuery("select count(*) from Student").uniqueResult();     String hql = "select c.name, count(s) from Classes c join c.students s group by c.name order by c.name"; 
   List students = session.createQuery(hql).list();    for (int i=0; i<students.size(); i++) {     Object[] obj = (Object[])students.get(i);     System.out.println(obj[0] + ", " + obj[1]); 
  
 

 


















 
DML风格的查询:  而数据库更新了,缓存不更新,所以要尽量少用。    Student student = (Student)session.get(Student.class, 1);    session.createQuery("update Student s set s.name=? where s.id<?") 
     .setParameter(0, "王五")      .setParameter(1, 5)     
 
.executeUpdate(); 
 
 
 
student = (Student)session.get(Student.class, 1); //get方法
获取缓存中没有更新的数据,导致读取的数据和数据库中的不一致。
0 0
原创粉丝点击