首页 > 其他分享 >addScalar的用法与作用

addScalar的用法与作用

时间:2023-04-18 14:46:54浏览次数:31  
标签:name list addScalar 查询 person session 用法 作用

作用:

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、指定查询结果中数据列的数据类型

标签:name,list,addScalar,查询,person,session,用法,作用
From: https://www.cnblogs.com/henuyuxiang/p/17329458.html

相关文章

  • ansible权威指南笔记(四)—— roles的用法
    一、roles简介自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等,只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并通过include调用......
  • 9.x - 13.0 postgresql 分区表新特性及简单用法
    一、分区表定义与意义1.分区表的定义把一个大的物理表分成若干个小物理表,并使得这些小物理表在逻辑上可以被当成一张表来使用。主表/父表/MasterTable主表是创建子表的模板,是一个正常的普通表,一般主表并不存任何数据。子表/分区表/ChlidTable/PartitionTable子表继承并属于一......
  • pg 崩溃恢复篇(一)—— WAL的作用与全页写机制
    WAL(WriteAheadLog)机制最初在7.1版中实现,以减轻服务器崩溃的影响。它也是基于时间点恢复(PITR)和流复制(SR)实现的基础。WAL机制非常复杂,在第一篇中,我们只看看为什么需要WAL,它有什么作用,又会有什么不足。一、 没有WAL的插入操作要看为什么需要有WAL,那就先看看如果没有会怎么样。假设......
  • Promise基本用法
    Promise是ES6的新特性,是异步编程的一种解决方案从语法上说,Promise是一个对象,从它可以获取异步操作的消息,可以解决回调地狱(回调地狱嵌套回调函数)Promise的含义:本身不是异步,是封装异步操作容器,统一异步的标准Promise对象的特点:对象的状态不受外界影响,一旦状态改变,就不会......
  • MySQL导入导出 —— mysqldump 简介及常见用法
    一、导出导出用户需要有导出对象的权限,例如导出表要有select权限、导出视图要有showview权限、导出触发器要有trigger权限、需要锁表时要有locktables权限等。如果dump文件中包含了GTID信息,则无法导入到未启用GTID的数据库(低于5.6.9版本的数据库不支持GTID,因此也无法导入到这些......
  • 变量,常量,作用域
    1.变量  2.常量 ......
  • vue常用组件之confirm用法及说明
    vue常用组件之confirm用法及说明原文链接:https://www.jb51.net/article/263587.htm+目录vue组件之confirmvue自定义confirm弹窗(全局组件)全局组件方式vue组件之confirm一些自带的方法,比如alert,confirm等,往往由于浏览器不同而展现出不同的样式,为了统一,我们可以自己实现简单封装,......
  • JS特殊用法
     --集合排序//排序//打印排序前集合console.log("排序前:"+data);for(vari=0;i<data[0].length;i++){ for(varj=0;j<data[0].length-1-i;j++){ //相邻元素两两对比,元素交换,大的元素交换到后面 if(data[1][j]+data[2][j]<data[1][j+1]+data[2][j+1]){// <为升序排列,降序请......
  • 盘点Python内置函数sorted()高级用法实战
    今日鸡汤清川带长薄,车马去闲闲。大家好,我是Python进阶者。一、前言前几天在Python钻石交流群有个叫【emerson】的粉丝问了一个Python排序的问题,这里拿出来给大家分享下,一起学习下。其实这里【瑜亮老师】、【布达佩斯的永恒】等人讲了很多,只不过对于基础不太好的小伙伴们来说,还是有......
  • [全程建模]关于分包的问题——用例、分析模型、设计模型的分包的作用和差异的对话
    2004-12-0714:41:53Song青润,用例的分包,分析模型的分包,以及系统的分包等必须统一吗?2004-12-0714:43:25Song系统的分包,我理解是设计模型的分包,与导出的代码是一致的,如果与前面的分包保持一致,那这些类混合在一起会很臃肿啊2004-12-0714:47:12青润不,是需要统一考虑的,而且是一个......