Hibernate的QBC与HQL查询

目录

1、Hibernate的QBC查询

2、Hibernate的HQL查询

3、NatvieSQL原生查询


1、Hibernate的QBC查询

Hibernate具有一个直观的、可扩展的条件查询API

public class Test {

   /**

    * @param args

    */

   public static void main(String[] args) {

      Session session = null;

      Transaction tx = null;

      try{

         session = HibernateUtil.getSession();

          tx = session.beginTransaction();

          //创建Criteria对象,指定需要查询的对象

          Criteria criteria = session.createCriteria(Product.class);

          //查询条件

          //通过Restrictions构造查询条件

          //Criterion c1 = Restrictions.ilike("proName", "%n%");

          //通过Property构造哦查询条件

          //Criterion c1 = Property.forName("proName").like("%n%");

          //Criterion c2 = Restrictions.between("proPrice", 50.00 , 100.00);

          //把查询条件添加到查询对象中

          //criteria.add(c1);

          //criteria.add(c2);

          //Criterion c3 = Restrictions.and(c1, c2);

          //criteria.add(c3);

          //调用list方法,返回对象的结果集合(hibernate自动封装对象)

         

          //查询分页

          //起始行数,下标从0开始

          //criteria.setFirstResult(2);

          //每页大小

          //criteria.setMaxResults(2);

         

          //排序

          //排序对象

          //Order order = Order.asc("proPrice");

          //把排序对象加入查询对象中

          //criteria.addOrder(order);

         

          //按例查询

          /*

          Product exam = new Product();

          exam.setProName("nike shoe");

          exam.setProPrice(200.0);

          //构建例子,把例子放入查询对象

          criteria.add(Example.create(exam));

          */

         

          //创建投影列表对象

          ProjectionList pl = Projections.projectionList();

          //创建投影属性,并放入投影列表对象中

         pl.add(Projections.groupProperty("proName"));

         pl.add(Projections.groupProperty("proPrice"));

          //把投影列表对象放入查询对象中

          criteria.setProjection(pl);

            

          List<Object[]> propsList = criteria.list();

          for(Object[] obj:propsList){

             String proName = (String)obj[0];

             Double proPrice = (Double)obj[1];

             System.out.println(proName+"--"+proPrice);

          }

          /*

          List<Product> stuList = criteria.list();

          for(Product s:stuList) {

             //System.out.println(s);

             System.out.println("id=="+s.getProId()+"\t name=="+s.getProName()+"\t price=="+s.getProPrice());

          }*/

         

          tx.commit();

      }catch(Exception e){

          e.printStackTrace();

          tx.rollback();

      }finally{

          HibernateUtil.closeSession();

      }

   }

}

2、Hibernate的HQL查询

        语法上与SQL类似,完全面向对象的查询,支持继承、多态、关联。

FROM子句:最简单的方式

查询所有的学生实例

Query query=session.createQuery("from Student");

query.list();

SELECT子句:选择那些对象和属性返回到结果集

查询所有的学生的姓名和年龄

Query query=session.createQuery(“select stu.name,stu.age from Student as stu");

query.list();

SELECT语句后可以跟多个任意类型的属性,返回结果保存在Object类型的数组中

//查询学生姓名和年龄

Query query=session.createQuery(“select stu.name,stu.age from Student as stu");

List<Object[]> os=query.list();

//返回的Object数组中有两个元素,第一个是学生姓名,第二个是学生年龄

SELECT语句后可以跟多个任意类型的属性,返回结果也可以保存在List

//查询学生姓名和年龄

Query query=session.createQuery(“select new List(stu.name,stu.age) from Student as stu");

List<List> lists=query.list();

SELECT语句后可以跟多个任意类型的属性,返回结果也可以是一个javabean对象

//查询学生姓名和年龄

Query query=session.createQuery(“select new Student(stu.name,stu.age) from Student as stu");

List<Student> stuList=query.list();

//注意:Student类必须有一个Student(String,int)的构造方法

SELECT子句中可以使用聚集函数、数学操作符、连接

支持的聚集函数如下: avg、sum、min、max、count

求学生的平均年龄

Query query=session.createQuery(“select avg(stu.age) from Student as stu");

List<Double> stuList=query.list();

WHERE子句:限制返回结果集的范围

查询所有性别为女性的学生实例

Query query=session.createQuery("from Student as stu where stu.sex=‘f’");

query.list();

WHERE子句中允许使用大多数SQL中可以使用的表达式

具名查询

Query namedQuery=session.getNamedQuery(String queryName);

3、NatvieSQL原生查询

        方便使用特定数据支持的SQL语句:例如Oracle的CONNECT关键字

        可移植性差:资源层如果采用了不同的数据库产品,需要修改代码

        非不得已,不推荐使用

创建Native SQL查询对象

调用Session接口上的createSQLQuery(String sql)方法。

该方法的参数为SQL的查询字符串,在SQLQuery对象上调用addEntity(Class pojoClass),设置查询返回的实体

SQLQuery query =session.createSQLQuery(“select * from student limit 2,10”)

query.addEntity(Student.class);

List<Student> stuList=query.list();

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

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

相关文章

kan 这是什么(想多了哈哈)

代码 import paddleclass Xus(paddle.nn.Layer):def __init__(self, head, head_dim):super().__init__()self.x_layer paddle.nn.Linear(head_dim, head * head_dim, bias_attrFalse)self.s_layer paddle.nn.Linear(head_dim, head * head_dim, bias_attrFalse)self.u_laye…

组合总和2(力扣40)

解题思路&#xff1a;因为这里不能有重复的组合&#xff0c;所以采取用下表used来判断其是否在前面出现过&#xff0c;如果出现过就直接跳过&#xff0c;同时判断是树层重复还是树枝重复&#xff0c;如果是树枝重复就不用跳过 具体代码如下&#xff1a; class Solution { pu…

Deep Learning Part Eight--Attention 24.5.4

01.在翻译、语音识别等将一个时序数据转换为另一个时序数据的任务中&#xff0c;时序数据之间常常存在对应关系 引入了Attention的概念&#xff0c;介绍了Attention的注意力机制&#xff1a; 困难出现&#xff0c;seq2seq的问题引入&#xff1a;固定化长度问题&#xff08;过于…

【数学建模】矩阵微分方程

一、说明 我相信你们中的许多人都熟悉微分方程&#xff0c;或者至少知道它们。微分方程是数学中最重要的概念之一&#xff0c;也许最著名的微分方程是布莱克-斯科尔斯方程&#xff0c;它控制着任何股票价格。 ​​ 股票价格的布莱克-斯科尔斯模型 微分方程可以由数学中的许多…

java基于云计算的SaaS医院his信息系统源码 HIS云平台源码

目录 云HIS功能模块 1、预约挂号&#xff1a; 2、药库管理&#xff1a; 3、门诊医生站&#xff1a; 4、门诊费用&#xff1a; 5、药房管理&#xff1a; 6、治疗室&#xff08;门诊护士工作站&#xff09;&#xff1a; 7、统计分析&#xff1a; 8、财务管理&#xff1a;…

香蕉新鲜度等级识别香蕉成熟度识别分类数据集13478张4类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;13478 分类类别数&#xff1a;4 类别名称:["overripe","rip…

STM32G474 CMAKE VSCODE FREERTOS 导入

一. 文件准备 1. 首先下载 freertos FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download 2. 移动 FreeRTOS-Kenel 到 moto_control 文件夹下。 3. 将 FreeRTOSConfig.h 放到 /Core/Inc 下面 4. 由于 FreeRTOSConfig.h 中使用了…

【数据结构】顺序表的基本操作实现

文章目录 前言一、顺序表的概念及结构二、顺序表的基本操作实现1.顺序表的创建2.顺序表初始化3.顺序表扩容4.头插和尾插5.头删和尾删6.查找7.任意位置插入8.任意位置删除9.顺序表的销毁 三、总结 前言 从本篇我们开始学习数据结构初阶的内容。 首先我们了解一下什么是线性表&…

【doghead】mac: clion2024.1启动崩溃

doghead 是在mac 下跑各种数据的因此&#xff0c;在配置了环境后, 进行mac 构建 【doghead】mac构建&#xff0c;首先对mac的clion进行安装 mac 下安装clion2024.1 之前可能装过crack的clion教育优惠的clion跟之前的应该不同clion2024.1 在mac的新系统下崩溃google下竟然没有…

腾讯云CentOS7使用Docker安装ElasticSearch与Kibana详细教程

文章目录 一、安装ElasticSearch二、安装Kibana 一、安装ElasticSearch 使用Docker拉取ElasticSearch镜像 这里版本选择的是7.15.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.22. 查看ElasticSearch的镜像id docker images3. 创建ElasticSearch容器 …

鸿蒙应用开发系列 篇一:鸿蒙系统概述

文章目录 系列文章鸿蒙系统的历史HarmonyOS 与 OpenHarmony鸿蒙系统的技术架构与核心特性内核层:安全与效率的双轮驱动系统服务层:分布式服务,重构连接的维度框架层:开发者的效率与创意舞台应用层:全场景应用生态的繁荣鸿蒙系统与其他操作系统与Android、iOS的比较:与AOS…

鸿蒙开发仿咸鱼TabBar

鸿蒙开发自定义TabBar&#xff0c;实现tabBar 上中间按钮凸起效果 第一步、定义数据模型 export default class TabItemData{defaultIcon: ResourceselectedIcon: Resourcetitle: stringisMiddle: booleanconstructor(defaultIcon:Resource, selectedIcon:Resource, title:st…

Java——数组的定义和使用

目录 1.什么是数组 2.创建数组 3.数组的使用 3.1获取数组长度 3.2遍历数组 3.3数组作为方法的参数 3.4数组作为参数的返回值 4.数组转字符串 5.数组拷贝 5.1Arrays.copyOf(arr,arr.length) 5.2Arrays.copyOfRange(arr,2,6) 1.什么是数组 数组就是具有相同属性的集合&am…

php中常见的运算符和使用方法

PHP中常见的运算符包括算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、字符串运算符、三元条件运算符&#xff08;也称为三目运算符&#xff09;、递增/递减运算符等。以下是这些运算符的简要说明和使用方法&#xff1a; 算术运算符&#xff1a; &#xff1a;加法…

【设计模式】之装饰器模式

系列文章目录 【设计模式】之模板方法模式 【设计模式】之责任链模式 【设计模式】之策略模式 【设计模式】之工厂模式&#xff08;三种&#xff09; 前言 今天给大家介绍23种设计模式中的装饰器模式。&#x1f308; 一、什么是装饰器模式 装饰器模式&#xff08;Decora…

【C++】文件

目录 文件文件分类文本文件的读写(ASCII文件)的读写打开文件打开文件的方式关闭文件将数据写入ASCII文件从ASCII文件读入数据 二进制存储对比ASCII和二进制存储用成员函数read和write读写二进制文件打开方式文件的读入与读出 文件 所谓文件&#xff0c;一般指存储在外部介质上…

c#学习基础1

一、复杂数据类型 1&#xff09;概述 2&#xff09;枚举 1.基本概念 枚举是一个比较特别的存在&#xff0c;它是一个被命名的整形常量的集合&#xff0c;一般用它来表示状态&#xff0c;类型等 1.1申明枚举和申明枚举变量 1.2申明枚举语法 2.在哪里申明枚举 3.枚举的使用 4…

Java 获取 Outlook 邮箱的日历事件

Java 获取 Outlook 邮箱的日历事件 1.需求描述2.实现方案3.运行结果 IDE&#xff1a;IntelliJ IDEA 2022.3.3 JDK&#xff1a;1.8.0_351 Outlook&#xff1a;Microsoft Office 2016 1.需求描述 比如现在需要获取 Outlook 邮箱中四月的全部的会议安排&#xff0c;如下图所示 …

双非二本找工作前的准备day20(算法-二叉树系列)

学习目标&#xff1a; 每天复习代码随想录上的题目1-2道算法&#xff08;时间充足可以继续&#xff09; 今日碎碎念&#xff1a; 1&#xff09;今天开始是二叉树系列 2&#xff09;出租屋里不知道干啥&#xff0c;看看书啊刷刷算法&#xff0c;打打游戏&#xff0c;学学技术…

anaconda、cuda、tensorflow、pycharm环境安装

anaconda、cuda、tensorflow、pycharm环境安装 anaconda安装 anaconda官方下载地址 本文使用的是基于python3.9的anaconda 接下来跟着步骤安装&#xff1a; 检验conda是否成功安装 安装CUDA和cuDNN 提醒&#xff0c;CUDA和cuDNN两者必须版本对应&#xff0c;否者将会出错…