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 < :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方法
获取缓存中没有更新的数据,导致读取的数据和数据库中的不一致。
//返回结果集属性列表,元素类型和实体类中的属性类型一致
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 < :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
- Hibernate中HQL语句的使用
- Hibernate中HQL语句的使用
- Hibernate中HQL语句的使用
- 如何在hibernate+mySQL中使用HQL的cast语句
- Hibernate中HQL使用SELECT语句
- Hibernate中使用HQL语句删除数据
- Hibernate 中HQL语句
- Hibernate 中HQL语句
- Hibernate中HQL语句
- hibernate中HQL语句
- hibernate中hql语句
- Hibernate 中HQL语句
- Hibernate中HQL语句
- Hibernate中常用的HQL语句总结
- Hibernate的Hql语句使用in关键字
- hibernate的hql不能使用insert语句
- Hibernate的HQL语句
- hibernate的hql语句
- SQLServer复杂SQL逻辑实现
- poj 3421 素因子个数和
- 重命名(方法,类,参数)
- ZooKeeper安装方法详解
- [C++设计模式]template 模板方法模式
- Hibernate中HQL语句的使用
- HDU 4864 Task
- window7下 HTTP 错误 500.19 - Internal Server Error 错误解决方法 集锦iis7
- android XXXActivity和getApplicationContext()区别
- Hadoop的学习前奏(一)——在Linux上安装与配置Hadoop
- [POJ 2689] Prime Distance
- 杭电1007
- 创建Windows服务(Windows Services)N种方式总结
- 顺序表基本操作