完整的HQL
语句形式如下:
select
| update
| delete
… from
… where
… group by
… having
… order by
… asc
|desc
其中的update
、delete
为Hibernate3
中所新添加的功能,可见HQL
查询非常类似于标准SQL
查询。HQL
查询在整个Hibernate
实体操作体系中占核心地位。
String hql = “HQL语句”;
Query query = session.createQuery(hql);
List list = query.list(); //查询得到多个实体对象集合
Object result = query.uniqueResult(); //查询得到一个实体对象
int x = query.executeUpdate(); //执行update或delete语句,返回数据表受影响行数
1.2、实体查询
查询过程中表名使用_类名_,列名使用_属性名_,类名和属性名称区分大小写
String hql=“from Users”;//from 实体类类型名称
Query query = session.createQuery(hql);
List list = query.list();
for (Users user : list) {
System.out.println(user);
}
1.3、带where的查询
Query query = session.createQuery(“from Users where uid=3”);
Users user = (Users) query.uniqueResult();//uniqueResult 单一对象
System.out.println(user);
Query query = session.createQuery(“from Users where uid>5”);
List list = query.list();
for (Users user : list) {
System.out.println(user);
}
1.3、属性查询
查询部分属性
String hql=“select u.uid,u.uname,u.upwd from Users u where u.uname=‘张三’”;
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
String hql=“select new Users(u.uname,u.upwd) from Users u where u.uname=‘张三’”;
Query query = session.createQuery(hql);
List list = query.list();
for (Users user : list) {
System.out.println(user);
}
1.4、实体的更新和删除
从hibernate 3版本开始才支持
//更新
String hql=“update Users set uname=‘王五’,upwd=‘321’ where uid=3”;
int res = session.createQuery(hql).executeUpdate();
//删除
String hql=“delete from Users where uid=3”;
int res = session.createQuery(hql).executeUpdate();
/*
返回值结果:
正整数:表受影响的行数据
0: 语句正常执行,但没有行受影响
负整数:通常是-1,执行HQL语句是一条查询语句
*/
HQL语句不能做添加
1.5、分组与排序
- 排序
处理方式和SQL语句中的排序是一样的
String hql=“from Users order by uid”;
Query query = session.createQuery(hql);
List list = query.list();
for (Users user : list) {
System.out.println(user);
}
order by语句只能出现在语句的最后位置
- 分组
处理方式和SQL语句中分组查询相同
分组语句需要处理筛选,只能使用having语句,而不能使用where语句。
String hql = “select e.dept.deptno, count(e) from Emp e group by dept.deptno”;
String hql = “select e.dept.deptno, count(e) from Emp e group by dept.deptno having count(e)>=5”;
1.6、参数绑定
- 使用占位参数
String hql=“from Users where uid=? or uname=?”;
Query query = session.createQuery(hql);
//索引从0开始
query.setInteger(0, 3);//query.setParameter(0, 3);
query.setString(1, “张三”);//query.setParameter(1, “张三”);
List list = query.list();
for (Users user : list) {
System.out.println(user);
}
- 使用参数名称
String hql = “from Users where uid=:no1 or uid=:no2”;
Query query = session.createQuery(hql);
query.setInteger(“no1”, 1);
query.setInteger(“no2”, 3);
//…
- 可以使用点位参数和名称参数混合使用
String hql = “from User where uid=? or uid=:no2”;
Query query = session.createQuery(hql);
query.setInteger(0, 7788);
query.setInteger(“no2”, 7566);
//…
//使用点位参数和名称参数混合使用,所有点位参数必须放在前面,一旦有名称参数出现,其后将不能再出现占位参数
1.7、连接查询
–SQL语句:查询员工姓名、薪资、部门名称
SELECT ENAME,SAL,DNAME
FROM EMP e JOIN DEPT d ON e.DEPTNO=d.DEPTNO
SELECT ENAME,SAL,DNAME FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO
-
没有on语句
-
能被连接到查询中的必须是主查询对象的子属性
String hql=“SELECT e.ename, e.sal, e.dept.dname FROM Emp e”;
//HQL连接查询
String hql=“SELECT e.ename, e.sal, d.dname FROM Emp e JOIN e.dept d”;
String hql = “SELECT e FROM Emp e JOIN e.dept”; //JOIN将没有意义
String hql = “FROM Emp e JOIN e.dept”;
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
//List集合中的数组中会保存两个元素:
//0:主数据(Emp)
//1:从数据(Dept)
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!
![img](https://i-blog.csdnimg.cn/blog_migrate/afae2c9c6b55014bce486638faad187f.jpeg)
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
😕/img-community.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
[外链图片转存中…(img-UfnqjJzV-1711367892850)]
大厂面试场景
[外链图片转存中…(img-msC7nyVY-1711367892850)]
知识点总结
[外链图片转存中…(img-ljf4T1tV-1711367892851)]
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!