addScalar的用法与作用

Hibernate原生SQL实战:addScalar与addEntity精准映射指南 原生SQL是ORM框架中应对复杂查询、性能瓶颈和数据库特性的关键能力。其核心在于绕过JPQL的抽象层,直接控制执行计划与结果解析。Hibernate通过SQLQuery提供三层能力:裸SQL执行、addScalar类型安全标量映射、addEntity实体自动装配,分别解决DML操作、聚合计算和领域模型复用等场景。技术价值体现在性能提升(如金融聚合快3.7倍)、类型安全(避免ClassCastException)和跨方言兼容(如PostgreSQL JSONB需自定义Type)。典型应用场景包括报表统计、对账 阅读详情

作用:

1.提高性能

2.指定要返回哪几个字段,为指定的不返回(主要用于select *查询全部)

3.也可指定返回字段的具体类型


详细讲解如下:

最基本的SQL查询就是获得一个标量的列表:

session.createSQLQuery("select * from person_inf").list();  
  
session.createSQLQuery("select id,name,age from person_inf").list();
         它们都将返回一个Object数组组成的List,数组每个元素都是person_inf表的一个字段值。Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。
         但是在JDBC中过多的使用ResultSetMetadata会降低程序的性能。所以为了过多的避免使用ResultSetMetadata或者为了指定更加明确的返回值类型,我们可以使用addScalar()方法:

session.createSQLQuery("select * from person_inf")  
  
.addScalar("name",StandardBasicTypes.STRING)  
  
.addScalar("age",StandardBasicTypes.INT)
.list();

  这个查询指定了:
         1、SQL查询字符串。
         2、要返回的字段和类型。
         它仍然会返回Object数组,但是此时不再使用ResultSetMetdata,而是明确的将name和age按照String和int类型从resultset中取出。同时,也指明了就算query是使用*来查询的,可能获得超过列出的这三个字段,也仅仅会返回这三个字段。
         如果仅仅只需要选出某个字段的值,而不需要明确指定该字段的数据类型,则可以使用addScalar(String columnAlias)。

public void scalarQuery(){  
        Session session = HibernateUtil.getSession();  
        Transaction tx = session.beginTransaction();  
        String sql = "select * from person_inf";  
        List list = session.createSQLQuery(sql).  
                    addScalar("person_id",StandardBasicTypes.INTEGER).  
                    addScalar("name", StandardBasicTypes.STRING).  
                    addScalar("age",StandardBasicTypes.INTEGER).list();  
        for(Iterator iterator = list.iterator();iterator.hasNext();){  
            //每个集合元素都是一个数组,数组元素师person_id,person_name,person_age三列值  
            Object[] objects = (Object[]) iterator.next();  
            System.out.println("id="+objects[0]);  
            System.out.println("name="+objects[1]);  
            System.out.println("age="+objects[2]);  
            System.out.println("----------------------------");  
        }  
        tx.commit();  
        session.close();  
    }

   从上面可以看出。标量查询中addScalar()方法有两个作用:
         1、指定查询结果包含哪些数据列---没有被addScalar选出的列将不会包含在查询结果中。
         2、指定查询结果中数据列的数据类型
Win32逆向必备:X32dbg中窗口句柄查看与消息断点的高级用法 本文深入探讨了X32dbg在Win32逆向工程中的高级应用,重点解析窗口句柄查看与消息断点的实战技巧。通过MFC程序逆向案例,详细介绍了如何利用窗口句柄层次结构、条件断点设置及消息映射表定位等技术,快速捕获关键业务逻辑,提升逆向分析效率。 阅读详情

相关推荐

解决Windows 10安装语言包时遇到的0x800F0954错误

在安装Windows 10操作系统的语言包时,如果遇到错误代码0x800F0954的提示,这无疑会让许多用户感到困惑和无助。这个错误通常意味着在安装过程中遇到了一些阻碍,导致无法正常完成语言包的安装。本文将为大家详细解析这个错误代码0x800F0954,并提供一系列有效的解决方法,帮助大家顺利安装所需的语言包。

nntxthml的博客 3793

Hibernate addScalar() addEntity() setResultTransformer() 返回的数据集合转为指定类或Map 等 使用以及学习总结

通过该种方式可以直接将 某一张表的全部列转为对应的 持久化实体,说白了就是你的库里面的所有字段对应的 Entity, 而且这个类上自然已经标注了每一个实体属性对应的列名称,从而 hibernate 自己可以识别出来。可以极大的简化这一过程,即可以将 Hibernate 结果的很多字段直接转为 对应的实体,或指指定的实体,或者Map 等等简化这一过程。如上所说,如果指定了 addScalar 中的列,那么返回的结果中只会包含添加到 addScalar 中的列,即使查询的比这个多也不会返回。......

weixin_44131922的博客 1710

利用Skipper跨层追踪技术高效定位LVS Short问题

本文详细介绍了如何利用Skipper跨层追踪技术高效定位LVS Short问题。通过解析Skipper的跨层trace net原理和实战操作步骤,帮助芯片设计工程师快速识别版图中的短路问题,显著提升验证效率。文章还提供了处理大规模设计的高级技巧和常见问题排查方法。

weixin_29239661的博客 507

addScalar

/** * 根据输入内容匹配查询function */ @SuppressWarnings({ "deprecation", "unchecked", "rawtypes" }) public List<Function> getFunctionDataAll(Page page,String searchAll) { int firstIndex = page.ge......

tongxin_tongmeng的博客 669

Coze离线部署实战:从镜像拉取到服务启动的完整避坑指南

本文提供了一份详尽的Coze平台离线部署实战指南。针对无外网的生产环境,详细讲解了从Docker镜像拉取、打包传输到内网服务器加载的完整流程,并重点剖析了使用docker-compose启动服务时常见的配置错误与权限问题,如文件挂载缺失、网络绑定错误等,提供了经过验证的避坑解决方案,旨在帮助运维和开发人员一次性成功部署。

weixin_29310605的博客 326

金融波动率的“捕手”:GARCH模型,揭秘市场波动的“聚集密码”

摘要: GARCH模型(广义自回归条件异方差)是金融时间序列分析中用于捕捉“波动聚类”现象的核心工具。传统模型(如ARIMA)无法刻画金融数据的时变波动特性,而GARCH通过建模条件方差的动态变化(如$\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2$),精准预测波动率。Python实战显示,GARCH能有效拟合模拟金融数据的波动聚类,残差无自相关,验证了其优越性。该模型在波动率预测、风险价值(VaR)计算和期权定

u010257409的博客 2048

Hibernate 的SQLQuery接口addScalar方法

使用原生的sql,并且希望sql查询出来的结果能够绑定到pojo上。 hibernate API中提供了createSQLQuery 和createQuery接口。 因为hibernate要查询的对象是要和表结构一一映射的,但是我们可能只需要其中几个字段,这个时候就用到了addScalar方法。 如: public List<CleaneyeCollectConfig> g...

深海微澜 992

GPU八卡A100使用INT4-W4A16量化大模型实验

本实验旨在探索在环境下,对大语言模型进行权重量化的可行性、效率与性能影响。通过采用工具集成 GPTQ 算法,实现对所有线性层的权重量化(W4A16 方案最终通过lm-eval工具在GSM8K任务上对压缩模型进行评估。

goodgood_UP的博客 1905

Hibernate的createSQLQuery查询的小例子

http://www.cnblogs.com/yayagepei/articles/1174893.html 当我们用HQL进行子查询的时候,如select * from Tree where pid in (select id from Tree,此时HIBERANTE就会报错,说什么*号错误之类的。但如果将*改为Tree类里的所有子段时就不会有问题了。就会像平时一样第一行数据返回一个Ob...

挨冻的晓东 342

华为用自研的MetaERP替换全球顶级的SAP ERP系统,其难度与风险远超一次普通的技术升级,它是一场战略级的、涉及业务筋骨的系统性工程

华为成功用自研MetaERP替换SAP系统,这是一项极具挑战的战略工程。面临四大难度:业务复杂度高(170多国业务)、数据迁移量大(20年历史数据)、技术集成复杂(重构生态系统)、人员适应周期长。同时伴随四大风险:业务中断、数据失真、成本超支、供应链协同问题。华为成功的关键在于:生存压力驱动的战略决心、强大的软件研发能力、以自身业务为试验场、分步实施策略。这一案例证明中国企业能攻克高端软件壁垒,但对大多数企业而言,核心系统替换需谨慎评估风险,建议采用渐进式替代策略。

金牌架构师 535

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 870

hibernate 中addScalar的用法与作用

作用: 1.提高性能 2.指定要返回哪几个字段,为指定的不返回(主要用于select *查询全部) 3.也可指定返回字段的具体类型 常用于自定义本地sql中 如: StringBuffer sql=new StringBuffer("select CONTENTID as \"contentid\",STATUS as \"status\" from CONTENT...

a304096740的博客 1146

【ArcGIS Pro微课1000例】0047:深度学习--棕榈树提取全流程

对汤加科洛瓦伊种植园每棵棕榈树的健康状况进行清查和评估,这需要花费大量的时间和劳动力。为简化此过程,将在 ArcGIS Pro 中使用深度学习模型来识别树木,然后根据植被绿度的测量值计算其健康状况。第一步是找到显示汤加科洛瓦伊的影像,该影像具有足够精细的空间和光谱分辨率来识别树木。获得此影像后,将创建训练样本并将其转换为可供深度学习模型使用的格式。为了让模型识别出它的查找任务,需要定义棕榈树的影像,以便识别相似的像素和树木大小。

智慧空间实验室 2205

java addscalar_hibernate 中addScalar的用法与作用

/** Hibernate, Relational Persistence for Idiomatic Java** Copyright (c) 2010, Red Hat Inc. or third-party contributors as* indicated by the @author tags or express copyright attribution* statements a...

weixin_39798579的博客 256

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【转】addScalar的用法与作用

作用: 1.提高性能 2.指定要返回哪几个字段,没指定的不返回(主要用于select *查询全部) 3.也可指定返回字段的具体类型 详细讲解如下: 最基本的SQL查询就是获得一个标量的列表: [java] view plain copy session.createSQLQuery("select *

xuzhuaaron1的博客 702

lwip-2.0.3

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

addScalar用法

addScalar("b03yf", Hibernate.STRING)中的“b03yf”是Hibernate的string类型。可以使用addScalar方法将查询结果转换成标量值,如: Double max = (Double) session.createSQLQuery("select max(cat.weight) as maxWeight from cats cat") .addSca

heartdiamond的专栏 8914

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SQLQuery addScalar

SQLQuery 还有很多使用价值,例如在处理非 hbm 对象的时候。   再举几个实例说明其中几个实用技巧。   1, addScalar 显式指定返回数据的类型;以下是代码片段~~     String sql = "select count

爱技术爱生活—TAO 1701

巧用SQLQuery中的addScalar

当我们用HQL进行子查询的时候,如select * from Tree where pid in (select id from Tree,此时HIBERANTE就会报错,说什么*号错误之类的。但如果将*改为Tree类里的所有子段时就不会有问题了。就会像平时一样第一行数据返回一个Object[],然后你再根据Tree类里字段对Object[]数组里的值进行转换。这样一来比较麻烦。今天发现如果我SQ...

五谷杂粮 279

Hibernate SQL查询 addScalar()、addEntity()

https://www.cnblogs.com/chenyixue/p/5601285.html 1. addScalar() 作用 a.用了addScalar()方法之后,查询只返回addScalar()指定的字段。 b.指定了返回字段的类型。 c.提高了程序效率。JDBC中过多的使用ResultSetMetadata会降低程序的性能。使用addScalar()后,不会再使用Result...

qq_39351176的博客 441

java addscalar_Hibernate SQL查询 addScalar()或addEntity()

Hibernate除了支持HQL查询外,还支持原生SQL查询。对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。该接口是Query接口的子接口。执行SQL查询步骤如下:1、获取Hibernate Session对象2、编写SQL语句3、通过Session的createSQLQuery方法创建查询对象4、调用SQLQue...

weixin_33603823的博客 308

SQLQuery.addScalar()方法

1,addScalar 显式指定返回数据的类型 String sql = "select count(*) as cnt from tblRead" + Misc.formatMoon(year, month) ... SQLQuery query = session.createSQLQuery(sql); query.addScalar("cnt", Hibernate.INTEGER)

wangjianwendao356119的博客 1422

createSQLQuery时,addScalar的应用

    问题起因:            抛了异常:nested exception is org.hibernate.PropertyNotFoundException: Could not find setter for YEARMONTH on class。            对应的Model里确实没有属性YEARMONTH。 不过名为yearMonth的属性。    ...

rmn190 287

Hibernate SQLQuery:addEntity & addScalar

使用它们时的注意: 1.Query 没有addScalar()和addEntity()方法,使用Query的子接口SQLQuery才有这两个方法 2.如果查询的结果集的字段为多个,如:[code="java"]String sql = "select id as \"id\",iata as \"iata\",flight as \"flight\",dest as \"dest\",domi.

Wuaner的博客 204
上一篇: DBCP连接池配置参数说明 c3p0使用说明
下一篇: Javascript 汉字转首字母的拼音 js文件(支持多音字的选择)
前端蜗牛君
博客等级 码龄10年 274粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值