Hibernate 的三种查询方式:HQL、Criteria、Sql

Hibernate框架之Query、Criteria、SQLQuery三个数据查询对象 Hibernate框架的作用是将持久化层的操作进行封装,也就是把数据库的操作进行了封装,我们可以不使用sql语句就能更新数据库。下面将介绍Query、Criteria、SQLQuery三个查询对象。 一、Query 通过Session对象获取,使用HQL语句。所谓HQL,就是Hibernate Query Language的缩写,就是Hibernate的查询语言。与SQL语句相似,但是面向的是对象... 阅读详情

一. Hibernate 的三种查询方式:HQL、Criteria、Sql:https://my.oschina.net/u/1450300/blog/280902

第一种方式:HQL(Hibernate Query Languge,Hibernate 查询语言)查询

是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式

语法:[select/update/delete……] from Entity [where……] [group by……] [having……] [order by……]

 

(1).没使用Spring框架的写法:

使用HQL需要四步

得到Session、编写HQL语句、创建Query对象(Query接口是HQL 查询接口。它提供了各种的查询功能)、执行查询,得到结果

    sessionFactory =

        new Configuration().configure().buildSessionFactory();

    session = sessionFactory.openSession();

    String hql = “from Street”;

    Query query = session.createQuery(hql);

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

 

(2).使用Spring框架的写法:

String queryString = "select form entity ....";

List list=getHibernateTemplate().find(queryString);

 

 

第二种方式:Criteria 查询

Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;

就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件

由Hibernate 自动产生SQL 查询语句

 

(1).没使用Spring框架的写法;

Criteria由Hibernate Session进行创建

SessionFactory sessionFactory = new Configuration().configure()

              .buildSessionFactory();

      Session session = sessionFactory.openSession();

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

      List result = criteria.list();

      Iterator it = result.iterator();

 

 (2)使用Spring框架的写法:

import org.hibernate.criterion.DetachedCriteria;

 

DetachedCriteria criteria=DetachedCriteria.forClass(ObjectEntity.class);

criteria.add(Restrictions.eq("propertyName", propertyValue));

List result=getHibernateTemplate().findByCriteria(criteria);

 

 

第三种方式:使用SQL语句查询(以下都是使用了Spring框架的写法)

1).这是把执行结果放到了一个类里:(这个类通常使用VO实体,VO实体一般就只用来接收查询结果)

List list = getHibernateTemplate().executeFind(new HibernateCallback() {

          public Object doInHibernate(Session session) throws HibernateException, SQLException {

                            StringBuffer hqlBuffer = new StringBuffer("");

                            hqlBuffer.append("select column_Name  from ...");//里面是SQL语句

                                              

                         SQLQuery sqlQuery = session.createSQLQuery(hqlBuffer.toString());

                 sqlQuery.addScalar("propertyName",Hibernate.STRING);//该propertyName是        ObjectVO实体的一个属性

                            sqlQuery.setResultTransformer(Transformers.aliasToBean(ObjectVO.class));    

                      List list = sqlQuery.list();

                      return list;//此处list集合中存放的是ObjectVO对象

                            }

                 });

 

2).返回结果放到list中的:

           final String queryString = "";//sql语句

           List resultList=getHibernateTemplate().executeFind(new HibernateCallback() {

                 public List doInHibernate(Session session) throws HibernateException, SQLException {

                      SQLQuery sqlQuery = session.createSQLQuery(queryString);

                      List list=sqlQuery.executeUpdate();

                      return list;

                 }

           });

 

 

3).无返回结果:

               final String queryString = "";//SQL语句

           getHibernateTemplate().executeFind(new HibernateCallback() {

                 public Object doInHibernate(Session session) throws HibernateException, SQLException {

                      SQLQuery sqlQuery = session.createSQLQuery(queryString);

                      sqlQuery.executeUpdate();

                      return null;

                 }

           });

 

二. Hibernate关于sql中的count(*)数据统计:http://blog.youkuaiyun.com/xiao190128/article/details/37695507

Hibernate关于sql中的count(*)数据统计:

①如果使用的是HQL:

直接在HQL中使用count(*)即可获取行数

        Long count = (Long)HibernateUtil.getSession()
                .createQuery("select count(*) from Employee")
                .uniqueResult();
        System.out.println(count);
    

②如果使用的是Criteria方式查询:

使用Projections.rowCount()方法

        Criteria criteria = HibernateUtil.getSession().createCriteria(Employee.class);
        criteria.setProjection(Projections.rowCount());
        Long count = (Long) criteria.uniqueResult();
        System.out.println(count);

其中返回值是Object类型的数值,可以通过强制转换成Long并调用intValue()方法来使用这个int值

 

 

卷积神经网络图像去噪实战:DnCNN残差学习与PSNR/SSIM评测 图像去噪是计算机视觉中最基础的任务之一,其目标是从含噪观测中恢复干净图像。深度学习,特别是卷积神经网络(CNN),通过端到端学习噪声到干净图的映射,显著超越了传统滤波方法。DnCNN作为经典结构,引入残差学习与批量归一化,让网络专注于拟合噪声分量,从而更高效地保留图像细节。相比小波变换和BM3D,CNN无需人工设计阈值,能自适应不同噪声分布。该技术在摄影降噪、医学影像增强、监控视频预处理等场景中应用广泛。围绕DnCNN的完整项目实现,涵盖高斯噪声模拟、数据集构建、网络设计、训练调参、推理脚本以及PSNR与S 阅读详情

相关推荐

基于EKF的UWB-IMU融合定位系统在农业机器人中的抗干扰优化与Matlab仿真

本文探讨了基于扩展卡尔曼滤波(EKF)的UWB-IMU传感器融合定位系统在农业机器人中的应用。通过Matlab仿真验证,该系统有效解决了农业环境中UWB信号遮挡和IMU累积误差问题,实现了厘米级高精度定位,显著提升了机器人在复杂场景下的抗干扰能力和导航可靠性。

numpy6sculptor的博客 622

hibernate 多条件查询,查询部分字段等操作

1.hibernate hql语句查询一个字段String userName="";String hql=" select employeeName from Employee where id="+empId+" ";Query query =this.getSession().createQuery(hql); List&lt;String&gt; list = query.list();...

taiweipeng的博客 817

手把手教你用树莓派蓝牙抓取小米温湿度计2代数据,接入HomeAssistant(附密钥获取避坑指南)

本文详细介绍了如何通过树莓派蓝牙抓取小米温湿度计2代数据并接入HomeAssistant的完整流程。重点解析了获取32位加密密钥的三种方法,包括使用Telink Flasher工具、米家APP抓包和开源工具ATC_MiThermometer,并提供了HomeAssistant集成配置和常见问题排查指南,帮助用户实现稳定可靠的温湿度监测。

一名菜鸟攻城师 777

JPA 和 Hibernate(Springboot中使用HQL)

在项目开发过程中,使用Springboot集成HQL,在此用于记录,下方有原生方法及HQL注意事项和示例,有兴趣的可往下阅读。

xxiaobaibaibai的博客 1948

STM32_WS2811驱动

STM32的WS2811驱动

健身房 2839

国产数据库安装部署说明

国产数据库安装部署说明

weixin_38203586的博客 907

数据库:Criteria与原生SQL查询

Hibernate除了提供强大的HQL查询之外,还提供了一种称为Criteria的查询方法。HQL和SQL很相似,其特点是灵活和功能丰富,但缺点是使用者必须熟悉SQL的语法,而且在组合条件查询时,常常需要拼装Where条件,还得为条件提供参数。而Criteria查询更加面向对象,和Java代码结合得更好,在组合条件查询时往往更加方便。当然,Criteria也有其缺点,其可读性不如HQL高,功能也不如HQL多。

qq_55917018的博客 2538

【异常】Milvus 向量数据库字段缺失错误分析与解决 MilvusVectorStoreServiceV2 - Failed to insert batch [0-1]: The field:

本文分析了Milvus向量数据库插入操作中出现的字段缺失错误。错误显示age_mode字段未提供,导致批量插入失败。根本原因是Milvus Schema要求所有定义字段必须存在,但代码中对部分字段采用条件添加方式。解决方案是将条件添加改为始终添加,为可能为null的字段提供空字符串默认值。文章总结了Schema约束、防御性编程等经验,并建议通过Schema变更检查、单元测试覆盖和数据校验层等预防措施避免类似问题。该问题影响product、mac、source等多个字段,修改后确保了数据插入的可靠性。

奶爸的编程之路,也就一周冷个三天 403

Criteria、SQL和HQL的区别

criteria: 和实体类绑定 Criteria criteria = session.createCriteria(实体类.class) 添加条件 criteria.add() 查询 返回实体类对象形成的列表 如果省略第二步,则默认查询全部 sql: 添加条件 SQLQuery sqlQuery = session.createSQLQuery(String sql) 和实体类绑...

Code_Mouse的博客 478

RT-DETR改进策略【独家融合改进】| SPD-Conv+PPA 再次提升模型针对小目标的特征提取能力

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1153

从0到1:OpenClaw 助力单元测试代码自动化与覆盖率飞升

OpenClaw 的横空出世,宛如一道曙光,照亮了这片黑暗的领域。它作为一款强大的本地 AI 助手,拥有着令人惊叹的能力。OpenClaw 能够深入理解代码的逻辑结构,自动分析代码中的各种功能和潜在的风险点,从而精准地生成高质量的单元测试代码。它就像是一位不知疲倦的测试专家,能够快速、准确地完成那些繁琐的测试编写工作,将开发者从重复劳动中解放出来,让他们能够将更多的精力投入到更具创造性和价值的工作中。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 476

学习Hibernate(HQL、Criteria、SQL三种查询)

学习Hibernate(HQL、Criteria、SQL三种查询)学习过程中的一些代码: 学习过程中的一些代码: // An highlighted block package com.how2java.test; import java.util.List; import org.hibernate.Query; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory;

Shi_YuATPX4869的博客 221

高通开发系列 - Bootloader之lk匹配dtb和dtbo中msm-id和board-id的知识

lk匹配dtb和dtbo中的msm-id和board-id等知识

fulinux的博客 4244

Hibernate的三种查询方式

Hibernate提供了三种查询方式: 1. Criteria查新方式(QBC); Criteria 查询采用**面向对象**方式封装查询条件,又称为对象查询;就是对SQL 语句进行封装,**采用对象的方式来组合各种查询条件**,由Hibernate自动产生SQL 查询语句。**Criteria查询只能进行一些比较简单的查询**; Session session ...

空调不够冷 607

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SSH框架之Hibernate的多种查询方式概述

Hibernate的多种查询方式 一、HQL查询: HQL查询与SQL查询区别: 1)SQL: (结构化查询语句)查询的是表以及字段; 不区分大小写。 2)HQL: hibernate query language 即hibernate提供的面向对象的查询语言。查询的是对象以及对象的属性,区分大小写。 二、Criteria查询:完全面向对象的查询。

一点一滴 3003

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Hibernate三种数据操作方式HQL-Criteria-Sql

Hibernate提供三种(当前知道的)数据操作方式:HQL,criteria,sql Criteria作为一种对象化的查询封装模式,不过由于Hibernate在实现过程中将精力更加集中在HQL查询语言上,因此Criteria的功能实现还没做到尽善尽美(这点上,OJB的Criteria 实现倒是值得借鉴),因此,在实际开发中,建议还是采用Hibernate 官方推荐的查询封装模式

笃行淡言 2201

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hibernate中Query & Criteria & SQLQuery的简单使用

Query & Criteria & SQLQuery的简单使用 1、Query 使用HQL方式。 HQL:Hibernate Query Language,面向对象的查询语言。 测试代码: package com.pipi.hibernate02; import com.pipi.hibernate.User; import myutils.HibernateUtil; import org.hibernate.Query; import org.hibernate.Session; i

pipizhen_的博客 475

Hibernate查询数据库的三种方式

说到使用Hibernate框架查询数据,最常用的就是使用HQL(HibernateQueryLanguage)语句了,或者使用原生态的SQL(Native SQL Query )语句,这就包括两种了,那么第三种是什么呢? 是他是他就是他—Criteria [kraɪ’tɪrɪə] Query 条件查询 (不好读啊!) 进行按条件查询(Query by Criteria,简称QBC)和按示例查询(

纸上得来终觉浅,绝知此事要躬行 2992
上一篇: session会话过期时间设置
下一篇: springmvc控制登录用户session失效后跳转登录页面
前端蜗牛君
博客等级 码龄10年 274粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值