HQL(Hibernate Query Language):是面向对象的查询语句,它的语法和SQL语句有些相像,在运行时才得以解析.HQL并不像SQL那样是数据操作语言,它用来取得对象,而不是进行update,delete和insert操作. HQL 是一门对大小写不敏感的的语言,所以SeLect与SELECT和sELeCT是相同的.
student 表中有五个字段,分别是:id,name,cardId,age,team_id; Student 是一个对象,student 是数据库中的一个表. 查询所有的Student对象时,最简单的HQL语句是: from Student,也可以写成 select s from Student (as)s. 注:这的as可以省略
遍历Student Query query=session.createQuery("form Student"); //注: 如果Student对象不是唯一的,那么需要写上包名,如: from test.Student test为包名. 注意: 如果执行HQL语句"from Student,Course",并不时单单返回两个对象,而是返回两个对象的笛卡尔积,这类似SQL语句中字段的全外连接.实际的应用中,"from Student,Course"这种语句几乎是不回出现的.
----单个属性查询: ----多个属性查询: Query query=session.createQuery("select s.name,s.age form Student s");
实例化查询结果可以说是对属性查询的一重改进.在使用属性查询时由于使用对象数组,操作和理解不太方便,如果将以个Object[]中的成员封装成一个对象就方便多了. Query query=session.createQuery("select new Student(s.name,s.age) form Student s"); 注:运行这个程序的时候,需要一个new Student(s.name,s.age)构造函数.在Student.java中编写这个构造函数.
4:查询链接: 与SQL查询一样,HQL也支持连接查询,如内连接,外连接和交叉连接.支持的链接类型是从ANSI SQL中借鉴来的. 1: inner jion (内连接) inner jion 可以简写为join. 正常情况下必须要建关联。
1: count() 统计记录的条数 //取得Student的数量 //avg()取得Student平均年龄 //upper()方法将字符串转为大写 //去除重复行distinct
from Team t where 22<all(select s.age from Student s) from Team t where all(select s.age from t.student s)>22
update() Student stu=(Student)session.get(Student.class,"id"); //根据id 得到stu对象
delete() Student stu=(Student)session.get(Student.class,"id"); //根据id 得到stu对象 |
|
来自: WindySky > 《hibernate》