也可以这样查询
(2.0)HQL别名查询
@Test
// 别名查询
public void demo03() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 得到所有的客户
//别名查询
Query query = session.createQuery(“from Customer c”);//c是Customer的别名
List list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
(2.1)HQL别名查询
@Test
// 别名查询
public void demo03() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 得到所有的客户
//别名查询
Query query = session.createQuery(“select c from Customer c”);//c是Customer
List list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
C:HQL的排序查询
(1)默认排序:升序排序
@Test
// 排序查询
public void demo04() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 得到所有的客户
// 排序查询
List list = session.createQuery(“from Customer order by cust_id”).list();// c是Customer
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
(2)设置降序排序
@Test
// 排序查询
public void demo04() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 得到所有的客户
// 降序查询
List list = session.createQuery(“from Customer order by cust_id desc”).list();// c是Customer
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
升序使用asc降序使用desc
D:HQL的条件查询
(一)按位置绑定:根据参数的位置进行绑定。
(1)一个条件
@Test
// 条件查询
public void demo05() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 条件查询
// 一、按位置绑定
Query query = session.createQuery(“from Customer where cust_name = ?”);// c是Customer
query.setParameter(0, “李冰”);
List list = query.list();
// 二、按名称绑定
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
(2)多个条件(模糊查询)
@Test
// 条件查询
public void demo05() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 条件查询
// 一、按位置绑定
Query query = session.createQuery(“from Customer where cust_source = ? and cust_name like ?”);
query.setParameter(0, “小广告”);
query.setParameter(1, “李%”);
List list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
(二)按名称绑定匿名名称
@Test
// 条件查询
public void demo05() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 条件查询
// 二、按名称绑定
Query query = session.createQuery(“from Customer where cust_source = :aaa and cust_name like :bbb”);
//设置参数
query.setParameter(“aaa”, “朋友推荐”);
query.setParameter(“bbb”, “李%”);
List list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
E:HQL的投影查询
投影查询:指的是查询对象的某个或某些属性。
(1)单个属性投影查询
@Test
// 投影查询
public void demo06() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 投影查询,查询当中的一个属性
List list = session.createQuery(“select c.cust_name from Customer c”).list();
for (Object object : list) {
System.out.println(object);
}
transaction.commit();
}
(2)多个属性投影查询
@Test
// 投影查询
public void demo06() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 投影查询,查询当中的一个属性
List<Object[]> list = session.createQuery(“select c.cust_name,c.cust_source from Customer c”).list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
transaction.commit();
}
(3)查询多个属性分装到对象当中投影查询
先对要查询的对象写入构造方法
@Test
// 投影查询
public void demo06() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 查询多个属性,分装到对象当中
List list = session.createQuery(“select new Customer(cust_name,cust_source) from Customer”).list();
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
F:HQL的分页查询
@Test
// 分页查询
public void demo07() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 分页查询
Query query = session.createQuery(“from LinkMan”);
query.setFirstResult(0);
query.setFirstResult(10);
List list = query.list();
for (LinkMan linkMan : list) {
System.out.println(linkMan);
}
transaction.commit();
}
注意在LinkMan当中也要生成对应的toString 方法
G:HQL的分组统计查询
(1)分组查询
@Test
// 分组统计查询
public void demo08() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
//聚合函数的使用:聚合函数包括:count(),max(),min(),avg(),sum()
//代表唯一结果uniqueResult
Object object = session.createQuery(“select count(*) from Customer”).uniqueResult();
System.out.println(object);
transaction.commit();
}
(2)分组统计(按照客户的来源统计客户的个数)
SQL语句:SELECT cust_source,COUNT(*) FROM cst_customer GROUP BY cust_source;
转换HQL将字段变为属性,把表的地方变为对象
@Test
// 分组统计查询
public void demo08() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
List<Object[]> list = session.createQuery(“select cust_source,count(*) from Customer group by cust_source”).list();//代表唯一结果uniqueResult
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
transaction.commit();
}
限定条件
SQL语句:SELECT cust_source,COUNT(*) FROM cst_customer GROUP BY cust_source HAVING count(*) >= 2;
@Test
// 分组统计查询
public void demo08() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
List<Object[]> list = session.createQuery(“select cust_source,count() from Customer group by cust_source HAVING count() >= 2”).list();//代表唯一结果uniqueResult
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
transaction.commit();
}
总结聚合函数
聚合函数的使用:聚合函数包括:count(),max(),min(),avg(),sum()
聚合函数 count(),求数据表的行数
select count(*/字段名) from 数据表
聚合函数 max(),求某列的最大数值
select max(字段名)from 数据表
聚合函数min(),求某列的最小值
select main(字段名) from 数据表
聚合函数sum(),对数据表的某列进行求和操作
select sum(字段名) from 数据表
聚合函数avg(),对数据表的某列进行求平均值操作
select avg(字段名) from 数据表
聚合函数和分组一起使用
select count(*),group_concat(age) from students group by age;
F:HQL的多表查询
a、SQL当中的多表查询
连接查询
i、交叉连接:笛卡尔积
A,B 代表两个表,,这种查询方式一般不用
select * from A,B;
ii、内链接 : inner join
(inner可以省略) 内链接查到的是两个表的交
{
隐式内链接 :
A 和 B 是两个表 A.id和B.id 分别对应两个表的关联字段
select * from A,B where A.id=B.id;
显示内链接 :
A 和 B 是两个表 A.id和B.id 分别对应两个表的关联字段
select * from A inner join B on A.id = B.id;
}
iii、外链接 外链接查询到的是两个表的交集以及left 或right对应的数据
{
左外链接 :left outer join(outer 可以省略)
select * from A left outer join B on A.id = B.id;
右外链接 : right outer join(outer 可以省略)
select * from A right outer join B on A.id = B.id;
}
b、HQL当中的多表查询
链接查询
交叉连接
内链接
显式内连接:封装成为数组
隐式内连接 from Customer c inner join c.linkMans
:封装成为数组
@Test
// HQL多表的查询
public void demo09() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
// SQL:SELECT * FROM cst_customer c INNER JOIN cst_linkman l ON c.cust_id =
// l.lkm_cust_id;
// HQL的内连接:from Customer c inner join c.linkMans
Query createQuery = session.createQuery(“from Customer c inner join c.linkMans”);
List<Object[]> list = createQuery.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
transaction.commit();
}
迫切内连接:(会将当前表外键对应的另外一个表当中的的数据都分装当中当前表对应的对象当中)封装成为对象
@Test
// HQL多表的查询
public void demo09() {
Session session = HibernateUtils.getCurrentSession();//建立连接
Transaction transaction = session.beginTransaction();//开启事务
// SQL:SELECT * FROM cst_customer c INNER JOIN cst_linkman l ON c.cust_id =
// l.lkm_cust_id;
// HQL:迫切内连接 其实就是在普通的内连接inner join后添加一个关键字叫fetch --> from Customer c inner join
// fetch c.linkMans
// fetch通知Hibernate,将另一个对象的数据封装到该对象当中,也就是前面的对象当中(将LinkMan当中的数据放到Customer当中)
List list = session.createQuery(“from Customer c inner join fetch c.linkMans”).list();
for (Customer customer : list) {
System.out.println(customer);
}
transaction.commit();
}
获取到的内容是将LinkMan当中的东西分装到了Customer当中,并且数据冗余
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。文章来源:https://www.toymoban.com/news/detail-849904.html
公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-htPJE1oc-1711628106129)]
[外链图片转存中…(img-8AIGwzGu-1711628106130)]
[外链图片转存中…(img-9f64eyYe-1711628106131)]
[外链图片转存中…(img-Db18FpLq-1711628106131)]
[外链图片转存中…(img-RDcVArJt-1711628106131)]
[外链图片转存中…(img-8czsptOW-1711628106132)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-VOJVx5iW-1711628106132)]
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
[外链图片转存中…(img-B4RcX2zV-1711628106132)]文章来源地址https://www.toymoban.com/news/detail-849904.html
到了这里,关于Hibernate的查询方式(大全),springcloud视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!