Hibernate(十五):QBC检索、本地SQL检索和HQL删除

  • QBC检索

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

1)通过Critera实现具有条件的查询

 1     @Test
 2     public void testCriteria00() {
 3         // 1、创建criteria对象
 4         Criteria criteria = session.createCriteria(Employee.class);
 5 
 6         // 2、添加过滤条件可以用Criterion表,Criterion可以通过Restrictions的静态方法返回。
 7         criteria.add(Restrictions.eq("email", "tommy10@dx.com"));
 8         criteria.add(Restrictions.gt("salary", 1000F));
 9 
10         System.out.println(criteria.uniqueResult());
11     }

执行sql及结果:

Hibernate: selectthis_.ID as ID1_1_0_,this_.NAME as NAME2_1_0_,this_.SALARY as SALARY3_1_0_,this_.EMAIL as EMAIL4_1_0_,this_.DEPARTMENT_ID as DEPARTME5_1_0_ fromDX_EMPLOYEE this_ wherethis_.EMAIL=? and this_.SALARY>?
Employee [id=11, name=tommy10, salary=10000.0, email=tommy10@dx.com]

2)通过Critera实现具有AND OR条件的查询

 1 @Test
 2     public void testCriteraAndOr() {
 3         Criteria criteria = session.createCriteria(Employee.class);
 4 
 5         // AND :使用Conjunction表示,Conjunction本身就是一个Criterion对象,且其中还可以添加Criterion对象
 6         Conjunction conjunction = Restrictions.conjunction();
 7         conjunction.add(Restrictions.like("name", "2", MatchMode.ANYWHERE));
 8         Department depart = new Department();
 9         depart.setId(5);
10         conjunction.add(Restrictions.eq("department", depart));
11 
12         // OR
13         Disjunction disjunction = Restrictions.disjunction();
14         disjunction.add(Restrictions.gt("salary", 10000F));
15         disjunction.add(Restrictions.isNull("email"));
16 
17         criteria.add(disjunction);
18         criteria.add(conjunction);
19 
20         List<Employee> items = (List<Employee>) criteria.list();
21         System.out.println(items.size());
22     }

执行sql及结果:

 1 Hibernate: 
 2     select
 3         this_.ID as ID1_1_0_,
 4         this_.NAME as NAME2_1_0_,
 5         this_.SALARY as SALARY3_1_0_,
 6         this_.EMAIL as EMAIL4_1_0_,
 7         this_.DEPARTMENT_ID as DEPARTME5_1_0_ 
 8     from
 9         DX_EMPLOYEE this_ 
10     where
11         (
12             this_.SALARY>? 
13             or this_.EMAIL is null
14         ) 
15         and (
16             this_.NAME like ? 
17             and this_.DEPARTMENT_ID=?
18         )
19 2

3)通过Critera实现统计查询:使用Projection 来表示

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

执行sql及结果:

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

4)通过Critera实现排序、分页查询

 1     @Test
 2     public void testOrderByAndPager() {
 3         Criteria criteria = session.createCriteria(Employee.class);
 4 
 5         // 1) Order By
 6         criteria.addOrder(Order.desc("salary"));
 7         criteria.addOrder(Order.desc("name"));
 8 
 9         // 2) Pager
10         int pageSize = 5;
11         int pageNum = 2;
12         List<Employee> employees = (List<Employee>) criteria.setFirstResult((pageNum - 1) * pageSize).setMaxResults(pageSize).list();
13         
14         System.out.println(employees.size());
15     }

执行sql及结果:

 1 Hibernate: 
 2     select
 3         this_.ID as ID1_1_0_,
 4         this_.NAME as NAME2_1_0_,
 5         this_.SALARY as SALARY3_1_0_,
 6         this_.EMAIL as EMAIL4_1_0_,
 7         this_.DEPARTMENT_ID as DEPARTME5_1_0_ 
 8     from
 9         DX_EMPLOYEE this_ 
10     order by
11         this_.SALARY desc,
12         this_.NAME desc limit ?,
13         ?
14 5

更多关于QBC的使用方式需要参考Hibernate官网实例。

  • 本地SQL查询

本地SQL查询来完善HQL不能涵盖所有的查询特性。

 1     @Test
 2     public void testNativeSqlInsert() {
 3         String sql = "insert into dx_department(id,name)values(?,?);";
 4 
 5         Query query = session.createSQLQuery(sql);
 6 
 7         query.setInteger(0, 7).setString(1, "移动部门").executeUpdate();
 8 
 9         Department departs = session.get(Department.class, 7);
10         System.out.println(departs);
11     }

执行sql及结果:

 1 Hibernate: 
 2     insert 
 3     into
 4         dx_department
 5         (id,name)
 6     values
 7         (?,?);
 8 Hibernate: 
 9     select
10         department0_.ID as ID1_0_0_,
11         department0_.NAME as NAME2_0_0_ 
12     from
13         DX_DEPARTMENT department0_ 
14     where
15         department0_.ID=?
16 Department [id=7, name=移动部门]
  • HQL删除操作:
1     @Test
2     public void testDeleteWithHQL() {
3         String hql = "DELETE FROM Department d WHERE d.id=:id";
4         session.createQuery(hql).setInteger("id", 7).executeUpdate();
5     }

执行sql及结果:

1 Hibernate: 
2     delete 
3     from
4         DX_DEPARTMENT 
5     where
6         ID=?

 

转载于:https://www.cnblogs.com/yy3b2007com/p/6985629.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 创建连接池失败_java-Presto JDBC连接池创建错误“不支持禁用...

我正在尝试使用Spring-JDBC连接到Presto,并且我正在使用Hikari CP作为数据源.这是我的配置&#xff1a;Beanpublic DataSource myDataSource() {HikariDataSource hikariDataSource new HikariDataSource();hikariDataSource.setDriverClassName("com.facebook.presto.jd…

ni软件管理器_NI 技术支持丨我的 NI 硬件设备不能被识别,怎么办?Windows

这篇指南可以帮助您解决在您的 Windows 系统上无法识别您的 NI 硬件有关的问题。症状包括以下几种情况&#xff1a;连接至 USB 端口时&#xff0c;硬件上的 LED 灯不亮/不闪烁。连接至 USB 后已连接设备的 LED 灯持续闪烁。仅限音频接口&#xff1a;该设备在音频应用程序或 Win…

环境搭建相关

1.检测jre运行环境 java -version 没有的话 按照提示安装 default-jre 够用 http://www.linuxidc.com/Linux/2016-11/136958.htm 否则按照上面处理 2.pycharm下载 https://www.jetbrains.com/pycharm/download/ 选择下载一个linux的 3.下载crackjar http://idea.lanyus.com/jar…

在Java应用程序中使用密码学

这篇文章描述了如何使用Java密码体系结构 &#xff08;JCA&#xff09;&#xff0c;该体系结构使您可以在应用程序中使用密码服务。 Java密码体系结构服务 JCA提供了许多加密服务&#xff0c;例如消息摘要和签名 。 这些服务可以通过特定于服务的API来访问&#xff0c;例如Me…

CSS学习笔记-04 a标签-导航练习

个人练习&#xff0c;各位大神勿笑 。。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&qu…

AngularJs简介

AngualrJs是一个javascript框架&#xff0c;它通过<script>标签加到HTML页面中。 Angular通过指令拓展了HTML&#xff0c;且通过表达式绑定数据到HTML。 Angular是一个javascript框架 Angular是一个javascript框架。它是一个以javascript编写的库。 Angular是以一个javas…

java怎样访问servlet_如何访问URL并从java servlet获取响应?

你需要做这样的事情import java.io.*;import java.net.URL;import java.net.URLConnection;import javax.servlet.http.*;import javax.servlet.*;public class URLServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse res)throws Se…

深度学习loss值变为0_利用TensorFlow2.0为胆固醇、血脂、血压数据构建时序深度学习模型(python源代码)...

背景数据描述胆固醇、高血脂、高血压是压在广大中年男性头上的三座大山&#xff0c;如何有效的监控他们&#xff0c;做到早发现、早预防、早治疗尤为关键&#xff0c;趁着这个假期我就利用TF2.0构建了一套时序预测模型&#xff0c;一来是可以帮我预发疾病&#xff0c;二来也可以…

在Spring MVC Web应用程序中使用reCaptcha

CAPTCHA是一种程序&#xff0c;可以生成人类可以通过的测试并对其进行评分&#xff0c;而计算机程序“ 不能 ”通过。 所采取的策略之一是向用户显示具有扭曲文本的图像&#xff0c;并且用户应在输入区域中书写文本。 如果显示的文字与用户输入的文字相同&#xff0c;则我们可以…

洛谷 P1757 通天之分组背包

P1757 通天之分组背包 题目背景 直达通天路小A历险记第二篇 题目描述 自01背包问世之后&#xff0c;小A对此深感兴趣。一天&#xff0c;小A去远游&#xff0c;却发现他的背包不同于01背包&#xff0c;他的物品大致可分为k组&#xff0c;每组中的物品相互冲突&#xff0c;现在&a…

课时109.外边距合并现象(掌握)

我们先写一个案例&#xff0c;通过案例来了解 它们之间的水平距离就是两个间距的和 我们看完水平再来看垂直方向 在默认布局的垂直方向上&#xff0c;默认情况下外边距是不会叠加的&#xff0c;会出现合并现象&#xff0c;谁的外边距比较大就听谁的 本文转载于:猿2048➜https:…

纯 CSS实现三角形

最近项目上做评论回复&#xff0c;设计师提高交互性特意设计了小三角&#xff0c;如下&#xff1a; 下面介绍一下实现效果的css方法&#xff1a; 1.border 通过设置上下左右border宽度来实现。 首先查看一下全部设置的效果&#xff1a; <style>   .triangle{     w…

python access_Python3 os.access() 方法

Python3 os.access() 方法概述os.access() 方法使用当前的uid/gid尝试访问路径。大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试。语法access()方法语法格式如下&#xff1a;os.access(path, mode);参数path -- 要用来检测是否有访问权限的路径。mode -…

小米的java待遇怎么样_【Java工资】小米2021年Java工资待遇-看准网

已经不是面试官迟到的问题了&#xff0c;是约好了面试时间&#xff0c;结果彻底没有然后了&#xff0c;这种言而无信我头一回见。小米运营部门令人困惑的工作作风&#xff0c;简单总结一句就是&#xff1a;敷衍不走心&#xff0c;面试规则内部都不统一。两次面小米&#xff0c;…

Spring MVC表单验证(带批注)

这篇文章提供了一个简单HTML表单验证示例。 它基于带有注释的Spring MVC示例。 该代码可在GitHub的Spring-MVC-Form-Validation目录中找到。 数据 在此示例中&#xff0c;我们将使用bean和JSR303验证批注&#xff1a; public class MyUser {NotNullSize(min1,max20)private …

课时106.边框练习(理解)

让我们做出来如下的样式&#xff1a; 1.首先看下有几个边框&#xff0c;就做几个div&#xff0c;用简单方法div.box$*6 tab键 2.然后给它们设置宽高 3.然后依此来做边框 第一个&#xff1a;有四种方法&#xff0c;第一种最简单 第二个&#xff1a;有两种方法&#xff0c;第二…

Bzoj3998 弦论

物理题目传送门 求第k大的子串&#xff1f;SAM模板题啊 CLJ的论文都讲了怎么做啊&#xff0c;把自动机看成一个后缀Trie求出size让后像多叉平衡树那样乱搞就好了~ 比前两个哈希的题好多了~ &#xff08;顺便&#xff0c;hdu高亮好好看啊&#xff09; #pragma GCC opitmize(&quo…

java需要先安装jdk_谢谢知乎。Java初学者首先下载 JDK 开发环境,然后再下 eclipse 对吗?那 tomcat是什么?还需要安装吗?...

程序猎人Till All are One!何马、FAN 等人赞同这个问题&#xff0c;作为有些Java经验的人&#xff0c;都会觉得太初级。而且&#xff0c;我认为可能很多真正的高手不屑于跑来回答这种问题。本来我也不打算回答的&#xff0c;但最近刚好凭兴趣在学Node.JS&#xff0c;顺便学习加…

JavaEE重新审视设计模式:装饰器

去年的这个时候&#xff0c;我写了一系列有关JavaEE实现设计模式的博客文章。 大约一年后&#xff0c;我意识到我错过了我最喜欢的图案装饰器。 装饰器模式基本上是通过装饰其他对象来扩展对象功能的方法&#xff0c;这些对象可以包装目标对象并为其添加自身的行为。 如果您从…

课时105.边框属性下(掌握)

2.3连写&#xff08;分别设置四条边的边框&#xff09; border-width:上 右 下 左; border-style:上 右 下 左; border-color:上 右 下 左; 注意点&#xff1a; 1.这三个属性的取值是按顺时针来赋值的 也就是按照上右下左来赋值&#xff0c;而不是按照日常生活…