本笔记继续使用dept部门表,emp员工表,一对多多对一双向映射。 1 条件查询 1.1 查询 员工表emp中 年龄eage小于30,月薪esal大于20000的员工姓名ename sql:select ename from emp where eage<? and esal >?; hql: select ename from Emp where eage<? and esal >? 1.2 问号的设置与别名 问号(?)的设置使用.setParameter(位置, 属性值) 在sql语句中问号的位置是从1开始,在hql中从零开始。 在hql中,问号(?)也可以起别用,:后面紧跟别名,setParameter("age", 30)方法也随之改变,将原先的数字改成"别名",如下所示 String hql="select ename from Emp where eage<:age and esal >:sal"; 1.3 一组问号的设置 对于一组问号也可以设置别名:如 查询在1,2部门的员工姓名 hql="select ename from Emp where did in (?,?)"; hql="select ename from Emp where did in (:d)"; Query query= session.createQuery(hql).setParameter("d", new Object[]{1,2}).list();
public void Test9() throws Exception{ 结果: Hibernate: select emp0_.ename as col_0_0_ from emp emp0_ where emp0_.eage<? and emp0_.esal>?
2 条件查询的常用关键字 2.1 distinct 过滤重复的值 查询员工表中的所有员工姓名,并去掉重复值 hql="select distinct ename from Emp "; 2.2 delete 删除 删除年龄大于25的员工 hql="delete Emp where eage>25"; 删除年龄大于25岁的用户 Query query=session.createQuery(hql); query.executeUpdate(); //执行 executeUpdate 方法返回int类型。 tx.commit(); //成功,则提交,对数据库操作 2.3 update 更新 更新员工编号11的年龄为22 String hql="update Emp s set s.eage='22' where s.eid=11"; //更新语句 Query query=session.createQuery(hql); query.executeUpdate(); //执行 tx.commit(); //成功,则提交 2.4 between...and...和not between... and...确定查询范围 查找员工表中年龄在20到30之间的员工姓名 hql="select ename from Emp where eage between 20 and 30" 2.5 in和not in确定查询集合 查询员工属于低1,2部门的员工姓名 hql="select ename from Emp where did in(1,2)" 2.6 like进行模糊查询 用like进行模糊查询时有两个可用的通配符:“%”和“_”。“%”代表长度大于等于0的字符,“_”代表长度为1的单个字符。 查询员工表中姓名中带有刘的员工 hql="select ename from Emp where ename like '%刘%'" 2.7 逻辑与 and 逻辑或 or 查询员工中薪水大于2000 同时年龄小于30的员工姓名 hql="select ename from Emp where esal>2000 and eage<30"; 查询员工中,年龄大于40或者年龄小于30的员工 hql="select ename from Emp where eage>40 or eage<30"; 2.8 order by对结果进行排序 对薪水进行排序,从小到大 hql="select esal from Emp where order by esal asc"; 对年龄进行排序,倒叙, hql="select ename from Emp where order by eage desc"; 2.9 group by对记录进行分组 根据部门分组,求出各组的平均薪水 hql=" select avg(esal) from Emp group by did"; 2.10 having 对分组进行筛选 根据部门分组,查出员工所在组平均薪水大于10000的员工姓名 hql=" select ename from Emp group by did having avg(esal)>10000";
3 聚集函数 查询emp员工表中有多少个员工。 sql:select count(ename) from emp; hql: select count(ename) from Emp; 聚集函数及含义: hql: select avg(esal) from Emp; 薪水平均值 hql: select max(esal) from Emp; 薪水最大值 hql: select sum(esal) from Emp; 薪水最小值 public void Test91() throws Exception{
结果: Hibernate: select count(emp0_.ename) as col_0_0_ from emp emp0_
4 子查询 Hibernate 支持子查询,所谓子查询就是,要查询的字段及信息在A表,条件在B表。语法与sql语句相似。 public void Test9() throws Exception{ 结果: Hibernate: select emp0_.ename as col_0_0_ from emp emp0_ where did in (select dept1_.did from dept dept1_ where dept1_.daddress=302)
5 导航查询 e.dept.daddress=301 员工所在部门的地址是301 public void Test9() throws Exception{ 结果: Hibernate: select emp0_.ename as col_0_0_ from emp emp0_, dept dept1_ where emp0_.did=dept1_.did and dept1_.daddress=301
|
|
来自: ajax111 > 《hibernate》