热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[原创]javaWEB学习笔记92:Hibernate学习之路QBC检索和本地SQL检索:基本的QBC查询,带AND和OR的QBC,统计查询,排序,分页...

本博客的目的:①总结自己的学习过程,相当于学习笔记②将自己的经验分享给大家,相互学习,互相交流,不可商用内容难

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.QBC 检索和本地 SQL 检索

  1)QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口

  2)本地SQL查询来完善HQL不能涵盖所有的查询特性:添加操作

 

2.QBC 的具体实践和相关API

  1)基本的QBC 查询

1 @Test
2 public void testQBC(){
3 //1.创建一个Criteria 对象
4 Criteria criteria = session.createCriteria(Employee.class);
5
6 //2.添加查询条件: 在QBC 中查询条件使用 Criteria 表示
7 //Criteria 可以通过 Restrictions 的静态方法得到
8 criteria.add(Restrictions.eq("email", "SKUMAR"));
9 criteria.add(Restrictions.gt("salary", 5000F));
10
11 //3.执行查询
12 Employee employee = (Employee) criteria.uniqueResult();
13 System.out.println(employee);
14 }
15

 

 

  2)带 AND 和 OR 的QBC: Restrictions 封装了一个常用的逻辑运算,算术等

  

1 @Test
2 public void testQBC2(){
3 Criteria criteria = session.createCriteria(Employee.class);
4
5 //1.AND :使用Conjunction 表示
6 //conjuntion 本身就是一个criteria 对象,且其中还可以添加Criteria 对象
7 Conjunction conjunction = Restrictions.conjunction();
8 conjunction.add(Restrictions.like("name", "a",MatchMode.ANYWHERE));
9 Department dept = new Department();
10 dept.setId(80);
11 conjunction.add(Restrictions.eq("dept", dept));
12 System.out.println(conjunction); //(name like %a% and dept=Department [id=80])
13
14 //2.OR
15 Disjunction disjunction = Restrictions.disjunction();
16 disjunction.add(Restrictions.ge("salary", 6000F));
17 disjunction.add(Restrictions.isNotNull("email") );
18
19 System.out.println(disjunction);//(salary>=6000.0 or email is not null)
20
21 //添加至 criteria
22 criteria.add(disjunction);
23 criteria.add(conjunction);
24
25 //执行
26 criteria.list();
27
28 }

 

1 Hibernate:
2 select
3 this_.ID as ID1_1_1_,
4 this_.NAME as NAME2_1_1_,
5 this_.SALARY as SALARY3_1_1_,
6 this_.EMAIL as EMAIL4_1_1_,
7 this_.DEPT_ID as DEPT_ID5_1_1_,
8 department2_.ID as ID1_0_0_,
9 department2_.NAME as NAME2_0_0_
10 from
11 GG_EMPLOYEE this_
12 left outer join
13 GG_DEPARTMENT department2_
14 on this_.DEPT_ID=department2_.ID
15 where
16 (
17 this_.SALARY>=?
18 or this_.EMAIL is not null
19 )
20 and (
21 this_.NAME like ?
22 and this_.DEPT_ID=?
23 )

 

 

  3)统计查询:Projections 封装了一些 sql的聚合函数

  

1 @Test
2 public void testQBC3(){
3 Criteria criteria = session.createCriteria(Employee.class);
4
5 //统计查询:使用Projection 来表示 可以由Projections 静态方法得到
6 criteria.setProjection(Projections.max("salary"));
7 System.out.println(criteria.uniqueResult());
8
9 }

 

1 Hibernate:
2 select
3 max(this_.SALARY) as y0_
4 from
5 GG_EMPLOYEE this_
6 24000.0

 

 

  4)排序,分页

1 @Test
2 public void testQBC4(){
3 Criteria criteria = session.createCriteria(Employee.class);
4 //1.添加排序
5 criteria.addOrder(Order.asc("salary"));
6 criteria.addOrder(Order.desc("email"));
7
8 //2.添翻页方法
9 int pageSize = 5;
10 int pageNo = 3;
11 criteria.setFirstResult((pageNo -1 ) * pageSize)
12 .setMaxResults(pageSize)
13 .list();
14
15
16 }
17

 

1 Hibernate:
2 select
3 *
4 from
5 ( select
6 row_.*,
7 rownum rownum_
8 from
9 ( select
10 this_.ID as ID1_1_1_,
11 this_.NAME as NAME2_1_1_,
12 this_.SALARY as SALARY3_1_1_,
13 this_.EMAIL as EMAIL4_1_1_,
14 this_.DEPT_ID as DEPT_ID5_1_1_,
15 department2_.ID as ID1_0_0_,
16 department2_.NAME as NAME2_0_0_
17 from
18 GG_EMPLOYEE this_
19 left outer join
20 GG_DEPARTMENT department2_
21 on this_.DEPT_ID=department2_.ID
22 order by
23 this_.SALARY asc,
24 this_.EMAIL desc ) row_
25 where
26 rownum <&#61; ?
27 )
28 where
29 rownum_ > ?

 

 

 

3.由于QBC 不支持插入操作&#xff0c;所以hibernate 支持使用原生的 sql 进行更新操作

1 &#64;Test
2 public void testNaviteSQL(){
3 String sql &#61; "INSERT INTO gg_department VALUES(?,?)";
4 Query query &#61; session.createSQLQuery(sql);
5
6 query.setInteger(0, 300)
7 .setString(1, "JASON")
8 .executeUpdate();
9
10 }

1 Hibernate:
2 INSERT
3 INTO
4 gg_department
5
6 VALUES
7 (?,?)

 

 

 4.QBC 支持删除操作

1 &#64;Test
2 public void testUpdate(){
3 String hql &#61; "DELETE FROM Department d WHERE d.id &#61; :id";
4 session.createQuery(hql).setInteger("id", 280).executeUpdate();
5 }

 

1 Hibernate:
2 delete
3 from
4 GG_DEPARTMENT
5 where
6 ID&#61;?

 

转:https://www.cnblogs.com/jasonHome/p/5936427.html



推荐阅读
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
author-avatar
daadhkiw_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有