HQL基础:
查询所有属性 from Object
指定表别名 select s.name from Object as;/select s.name from Object s;
查询指定属性 select s.name n.name from Object1 s,Object2 n;
where子句
distinct
删除对象 delete Object s where s.name=???;
更新对象 update Object set s.name=value where Object.name=??;
查询并计算属性值 select s.age-6 from Object s;
使用函数 low小写 count计数 sum求和 max求最大值 min求最小值 avg
between。。and / not between。。and
in / not in
like
and /or
order by
group by having
HQL进阶:
1,HQL查询中一个查询一个父类的同时会默认查询他的子类
2,限制查询数据条数
Query有两个函数 setFristResult和setMaxResult分别设置查询的第一个数据行的索引和最大查询数
这样的话 我们能使用这个方式来实现分页功功能
3,使用绑定参数
1, 我们在hql中直接使用程序变量如: String hql="select a from Object a whre a.name="+name;
这种方式如意被别人使用sql注入攻击
2,查询语句中以“:”开头的变量叫做命名参数,把命名参数和一个具体的值进行绑定的过程 叫做绑定参数 如:
String hql="from Oblect where name=:name and age>:age";
Query query=session.createQuery(hql); //创建查询
query.setParameter("name","李晓梅"); //进行绑定
query.setParameter("age",new Integer(20));
4,在hbm.xml中配置HQL语句
<hibernate-mapping> <class name="Object" table="table" catalog="joblog"> <!--此处省略了配置--> </class> <query name="searchStudent"> <![CDATA[ from Student s where s.sage>22 ]]> </query> </hibernate-mapping>
如何取出使用HQL语句:
Session session=Hsf.currentSession();//创建Session
Query query=session.getNamedQuery("searchStudent"); //用getNamedQuery得到查询
List list=query.list(); //执行查询
Iterator it=list.iterator();
while(it.hasNext()){
Student stu=(Student)it.next();
System.out.println(stu.getSname());
}
5,子查询
带in的子查询:
from Object where name in(from Object2 where Object2.name="value");
比较子查询:
from Student s where s.sdept=(select s.sdept from s where s.sname='李晓梅')
带有and和or的子查询:
使用ANY或者ALL谓词时,必须同时使用比较运算符。查询其他系中比计算机系任一学生 年龄小的学生名单如:>ANY,大于子查询结果中的某个值>ALL,大于子查询中的所有值
6,Hibernate多表查询
多表之间的关系:表的关系映射
左外连接
右外连接