HQL

HQL连接查询 Hibernate进行多表查询与SQL其实是很相似的,但是HQL会在原来SQL分类的基础上又多出来一些操作。HQL的多表连接查询的分类如下:      其实这些连接查询语法大致都是一致的,都是HQL查询的是对象而SQL查询的是表。那么我们来比较一下SQL和HQL的连接查询。 SQL连接查询: HQL连接查询:      在HQL中,我们不用写关联 阅读详情
1.hql更新
String hql = "update PhUser set realName=?";
int row=this.getSession().createQuery(hql).setString(0, "小李想").executeUpdate();
PhUser 类名 
2.hql删除
String hql = "delete PhUser a where a.userId=2";
int row=this.getSession().createQuery(hql).executeUpdate();
还有个这种的格式:
final String hql = "delete PhRoleFunction as a where a.roleId = "
+ roleId;
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
return session.createQuery(hql).executeUpdate();
}
});更新也可以写成这样的格式
3.hql单表查询
String hql = "from PhUser a where a.userId=" + userId;
List list = this.getHibernateTemplate().find(hql);
4.hql多表查询
(1)String hql = "select new map(a.CUId as CUId,a.unitName as unitName,b.CUFId as CUFId,b.UFName as UFName) from PhCorrelativeUnit a,PhCorrelativeUnitFunction b where a.CUId=b.CUId";
List list = this.getHibernateTemplate().find(hql);
多个表的字段放到map中,map的键值就是as后面的别名,如果没有as就是字段名
(2) String hql = "select new com.phantom.appeal.action.bean.DealPaper(a.id as id,a.billId as billId,a.state as     state,a.creator as creator,a.createtime as createtime ,b.eventContent as eventContent ,c.realName as     realName,b.billCode as billCode,b.citName as citName ) from PhDealBill a,PhAcceptBill b,PhUser c where    a.departmentId="+ billid+ " and a.state=0 and a.billId=b.billId and a.creator =c.userId order by a.billId";
return this.getHibernateTemplate().find(hql);
另外就是写一个类,对应你要查询的字段,这里的类名是new com.phantom.appeal.action.bean.DealPaper,里面对应查询的字段名
5.得到记录数
String hql = "select count(*) from PhUser";
List list = this.getHibernateTemplate().find(hql);
return ((Long) list.get(0)).intValue();

 

 

五种检索方式的使用场合和特点:

HQL : 是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。
       查询设定各种查询条件。
       支持投影查询,检索出对象的部分属性。
       支持分页查询,允许使用having和group by
       提供内制的聚集函数,sum(),min(),max()
       能调用用户的自定义SQL
       支持子查询,嵌入式查询
       支持动态绑定参数
建议使用Query接口替换session的find方法。
   Query Q = session.createQuery("from customer as c where c.name = :customerName" + "and c.age = :customerAge");
   query.setString ("customerName" , "tom");
   query.setInteger("customerAge" , "21");
   list result = query.list();
QBC : QBCAPI提供了另一种方式,主要是Criteria接口、Criterion接口和Expression类
   Criteria criteria = session.createCriteria(customer.class);
   Criterion criterion1 = Expression.like("name","t%");
   Criterion criterion2 = Expression.eq("age",new Integer(21));
   Critera = criteria.add(criterion1) ;
   Critera = criteria.add(criterion2) ;
   list result = criteria.list();
   或是: list result = session.createCriteria(Customer.class).add(Expression.eq("this.name","tom")).list();
SQL : 采用HQL和QBC检索时,Hib生成SQL语句适用所有数据库。
   Query query = session.createSQLQuery("select {c.*} from customers c where c.name like : customername " + "and c.age = :customerage","c",customer.calss);
   query.setString("customername","tom");
   query.setInteger("customerage","21");
   list result = query.list();
/////////////多态查询
   HQL :session.createQuery("from employee");
   QBC :session.createCriteria(employee.class);
   HQL : session.createQuery("from hourlyEmployee");
   QBC : session.createCriteria(hourlyEmployee.class);
   下面的HQL查询语句将检索出所有的持久化对象:
   from java.lang.Object ;
   from java.io.serializable ;
////////////查询的排序
   1'查询结果按照客户姓名升序排列:
   HQL :
        Query query = session.createQuery ("from customer c order by c.name");
   QBC :
        Criteria criteria = session.createCriteria(customer.class);
        criteria.addOrder(order.asc("name"));
   HQL :
        Query query = session.createQuery ("from customer c order by c.name asc , c.age desc");
   QBC :
        Criteria criteria = session.createCriteria(customer.class);
        criteria.addOrder(order.asc ("name"));
        criteria.addOrder(order.desc("age"));

        import net.sf.hibernate.pression.Order
        import mypack.Order
        ...........
        Criteria criteria = session.createCritria (mypack.Order.class);
        criteria.addOrder(net.sf.hibernate.Order.asc("name"));
///////////HQL语句的参数绑定Query接口提供了绑定各种Hib映射类型的方法。
        setBinary()
        setString()
        setBoolean()
        setByte()
        setCalendar()
        setCharacter()
        setDate()
        setDouble()
        setText()
        setTime()
        setTimestamp()
        setEntity()//把参数与一个持久化类的事例绑定lsit result = session.createQuery("from order o where o.customer =            :customer").setEntity("customer" , customer).list ;
        setParameter()//绑定任意类型的参数
        setProperties()//把命名参数与一个对象的属性值绑定 Query query = session.createQuery("from customer c where c.name =:     name " + "and c.age =:age" );
        Query.setProperties(customer);

过滤查询结果中的重复元素
     使用Set集合来去除重复元素;或是使用distinct元素
     Iterator iterator = session.createQuery("select distinct c.name from customer ").list().iterator();
     while(iterator.hasnext()){
           String name = (String) it.next() ;
     }
///////////使用聚集函数
count(); 记录的条数
min();   求最小值
max();   求最大值
avg();   求平均值
sum();   求和
1'查询customer中的所有记录条数
   integer i = (Integer) session.createQuery("select count(*) from customer").uniqueResult();
2'查询customer中的所有客户的平均年龄
   integer i = (Integer) session.createQuery("select avg(c.age) from customer c ").uniqueResult();
3'查询customer中的客户年龄的最大值、最小值
   object [] i = (Integer) session.createQuery("select max(c.age),min(c.age) from customer c ").uniqueResult();
   Integer Maxage = (Integer) i [0];
   Integer Minage = (Integer) i [1];
4'统计customer中的客户的名称数目,忽略重复的姓名
   Integer cout = (Integer) session.createQuery("select count(distinct c.name) from customer c").uniqueResult();
////////////使用分组查询
1'按姓名分组,统计customer中的相同姓名的记录数目
   Iterator iterator = (Integer) session.createQuery("select c.name ,count(c) from customer c group by c.name").list.iterator();
   while(iterator.hasnext()){
         object[] p = (objcet[])iterator.next();
         String name = p[0];
         Integer cout = p[1];
   }
2'按客户分组,统计每个客户的订单数量
   Iterator iterator = session.crateQuery("select c.id ,c.name , count(o) from customer c join c.order o group by c.id ").list().iterator;
   while(iterator.hasnext()){
         object[] p = (objcet[])iterator.next();
         Integer id = p[0]
         String name = p[1];
         Integer cout = p[2];
   }
3'统计每个客户的订单总价
   Iterator iterator = session.crateQuery("select c.id ,c.name,sum(o.price) from customer c join c.order o group by c.id").list.iterator();
   while(iterator.hasnext()){
         object[] p = (objcet[])iterator.next();
         Integer id = p[0]
         String name = p[1];

SQL进阶技巧:如何使用HQL统计字符串中字符的个数? 0 需求 统计在字符串"HELLO HELLO"中出现了多少个LL 1 分析 分析思路: (1) 用regexp_replace()函数将要计算的字符替换为'' select regexp_replace("HELLO HELLO","LL",'') 0: jdbc:hive2://10.9.4.117:10000> select regexp_replace("HELLO HELLO","LL",''); +----------+--+ | _c0 | +----------. 阅读详情

相关推荐

hql批量删除

批量删除数据批量插入数据 9.4.4 直接通过JDBC API来进行批量操作 当通过JDBC API来执行SQL insert、update和delete语句时,SQL语句中涉及到的数据不会被加载到内存中,因此不会占用内存空间。 以下程序直接通过JDBC API来执行用于批量更新的SQL语句:

Hql中的三种删除方式

关于Hibernate的删除方式搞了一上午,终于完成啦。 Hibernate的删除方式:    /*方式一*/String hql = "select p from Province as p where p.id=?";Query query = session.createQuery(hql);query.setString(0, id);Province p = (Province)quer...

jackzhangyunjie的专栏 2526

AXI backpressure反压机制代码

本文将xilinx的axi读写代码进行修改,实现吞吐量达到50%

m0_64636251的博客 1765

经典hql语句

1.hql更新String hql = "update PhUser set realName=?";int row=this.getSession().createQuery(hql).setString(0, "小李想").executeUpdate();PhUser 类名 2.hql删除String hql = "delete PhUser a where a.u...

qsfwy的专栏 189

瑞萨RA6M5驱动ST7735屏幕避坑指南:从软件SPI到显示汉字与图形的完整流程

本文详细介绍了瑞萨RA6M5单片机驱动ST7735屏幕的完整流程,涵盖硬件连接、软件SPI控制、汉字显示及图形绘制优化等关键步骤。通过避坑指南和实用代码示例,帮助开发者解决屏幕初始化、时序控制、字库移植等常见问题,实现高效稳定的显示效果。

weixin_28705087的博客 275

计算机组成原理 微程序控制器实验

微程序控制器实验 实验环境 计算机组成原理实验环境 实验目的 掌握微程序控制器的组成原理和工作过程。 理解微指令和微程序的概念,理解微指令与指令的区别与联系。 掌握指令操作码与控制存储器中微程序的对应方法。熟悉根据指令操作码从控制存储器中读出微程序的过程。 实验要求 做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。 写出实验报告。 实验电路        

Long_UP的博客 7万+

hql删除mysql语句_hibernate -- HQL语句总结

本章介绍了Hibernate的几种主要检索方式:HQL检索方式、QBC检索方式、SQL检索方式。HQL是HibernateQueryLanguage的缩写,是官方推荐的查询语言。QBC是QueryByCriteria的缩写,是Hibernate提供的一个查询接口。Hibernate是一个轻量级的框架,它允许使用原始SQL语句查询数据库。1.1HQL基础HQL是Hiberante官方推荐的...

weixin_33648811的博客 598

三、分区配置

rk3566/rk3568 修改分区

暮云星影的博客 514

【HQL】HiveQL 库和表的创建、修改、删除

  今天继续学习 HiveQL。HiveQL 和 MySQL 接近,但也有差异。它不支持行级插入操作、更新操作、删除操作,不支持事务。 1.Hive 中的数据库 Hive 中的数据库本质上是表的目录或命名空间。常用操作: # 创建数据库 create database financials; # 为了避免已经存在该数据库,可以使用 create database if not exists financials; # 查看数据库 show databases; # 正在表达式匹配数据库,例如查看 f

每天更新大数据面经和技术 3218

27、VXLAN BGP EVPN网络的自动化部署与运维管理

本文深入探讨了VXLAN BGP EVPN网络从初始配置到运维管理的全生命周期自动化流程,涵盖Day-0设备自动上线、Day-0.5增量变更与连接验证、Day-1覆盖服务配置与计算集成,以及Day-2监控与故障排查。详细介绍了推送与拉取两种配置模型、主流工具如Cisco VTS、NFM、DCNM的功能特点,以及开源自动化工具的应用。通过流程图和命令示例,系统展示了MAC/IP学习、BGP通告和VXLAN封装的验证方法,为构建高效、可扩展的数据中心网络提供了全面的技术指导。

banana的博客 81

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 **`CrashLoopBackOff`** 表示某个容器在启动后崩溃,Kubernetes > 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 `CrashLoopBackOff > `状态的原因、解决方案及相关命令的输出解释。

颜淡慕潇 8381

掌握HQL--HQL语法全面指南

HQL语法全面指南

jixiangendless的博客 4646

【论文复现】——基于NDT与ICP结合的点云配准算法(matlab版)

基于NDT与ICP结合的点云配准算法matlab版

点云侠的博客 490

什么是hql以及hql和sql的区别

一、hql的定义 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 二、HQL 1.HQL里面的类名和属性名区分大小写,但关键字不区分大小写 2. ? 从下标0开始计算位置 3. HQL支持:命名参数 4. HQL是面向对象的查询语言 三、SQL 1.SQL里面的表名和列名不区分大小写 2.? 从顺序1开始计算位置 3.SQL不支持:命名参数 4.SQL是面向结构的查询语言 四、处理返回的结果集 4.1 单个对象:通过

m0_48680499的博客 9354

【实战教程】BMAD-METHOD 入门教程:用 AI 组建你的“七人开发团队”

简单说,BMAD-METHOD 就像一个会自己运转的“AI 软件公司”。它不是某个单一应用,而是一种AI 工作流方法论—— 把一个项目拆解成多个角色(产品、架构、前后端、测试、运维等),每个角色由一个 AI 智能体负责协作,就像你真的在带一个 7 人团队。GitHub 项目地址 👉目前 Star 数已经达到了恐怖的 20k,可见这套方法的影响力不小。BMAD-METHOD 的核心理念不是“生成代码”,而是“自动化协作”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1624

假人有限元模型

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

hql

HQL 是Hibernate Query Language的缩写 hql 与 sql 的区别/异同 hql sql 类名/属性 表名/列名 区分大小写,关键字不区分大小写 不区分大小写 别名 : ?,从下标0开始计算位置(hibernate5之后不支持) 别名:?,从顺序1开始计算位置 :命名参数 不支持:命名参数 面向对象的查询语言 面向结构查询语言 hql...

wx1762813417的博客 2233

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hibernate之HQL

1. 什么是HQL HQL是Hibernate Query Language的缩写 2. hql和sql区别/异同 HQL SQL 类名/属性 ...

m0_60390944的博客 3034

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

HQL是什么HQL和SQL的区别

1. 什么是HQL?             Hibernate独家查询语言,属于面向对象的查询语言,             编写HQL的时候,不需要写数据库表中字段,而是写属性的名称               HQL是Hibernate Query Language即Hibernate查询语言            [select/update/delete……] from Entit...

一筐猪的博客 1万+

什么是HQL

Hadoop管理员:管理Hadoop集群的部署、维护和安全性,包括用户管理、数据源管理和HQL查询优化等,以保证Hadoop集群的正常运行和数据的安全性。数据分析师:使用HQL进行数据分析和可视化,包括数据的导入、清洗、转换、建模和报表设计等,以实现数据的探索和发现。优化查询语句:优化查询语句可以减少查询的响应时间,包括使用合适的查询条件、减少不必要的表连接和使用索引等。调整查询计划:调整查询计划可以优化查询性能,包括使用合适的分区、调整数据分布和使用合适的并行度等。

Wxh_bai的博客 2870

HQL语句详解

Hibernate提供了异常强大的查询体系,使用Hibernate有多种查询方式。可以选择使用Hibernate的HQL查询,或者使用条件查询,甚至可以使用原生的SQL查询语句,此外还提供了一种数据过滤功能,这些都可用于筛选目标数据。     下面分别介绍Hibernate的4种数据筛选方法:

John的专栏 3918

HQL总结

HQL 总结HQL定义HQL全称为hibernate Query Language,是Hibernate的查询语言HQL是面向对象的查询语言: 1. HQL的查询主体是映射配置的持久化类(BEAN类)及其属性 2. SQL的查询主体是数据库表(TABLE)HQL语句形式select from 指定HQL的查询目标(HQL最少只需要一个from语句即可成立) where 逻辑表达式,设

Gandalf_aro的博客 709

HQL的基本描述

hql查询格式:from + 类名 + 类对象 + where + 对象的属性 及常用hql语句

yuan_1994的博客 1068

HQL查询

HQL查询:  Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。完整的HQL语

JASOVA - #时光机# 1737

Hibernate之HQL

一、HQL入门 1、HQL的含义: HQL是Hibernate Query Language(专属于hibernate框架的一个查询语言)的缩写 2. hql和sql区别/异同 HQL SQL 类名/属性 ...

m0_52681702的博客 308
上一篇: 自定义jsp标签
下一篇: el表达式与jstl
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值