sql 解析 java_将Java 8流解析为SQL

sql 解析 java

当Java 8发行并且人们开始流式处理各种东西时,不久之后他们就开始想象如果可以以相同的方式使用数据库将有多大的潜力。 本质上,关系数据库由以表状结构组织的巨大数据块组成。 这些结构非常适合进行过滤和映射操作,如SQL语言的SELECT,WHERE和AS语句所示。 人们最初做的事情(包括我在内)是向数据库询问大量数据,然后使用新的炫酷Java 8流处理这些数据。 月球漫步

很快出现的问题是,仅将所有行从数据库移到内存的等待时间就花费了太多时间。 结果是,使用内存中的数据没有太多收益。 即使您可以使用新的Java 8-tools真正搞怪高级功能,但由于性能开销,这种优势并没有真正应用到数据库应用程序中。

当我开始致力于Speedment Open Source项目时,我们很快意识到使用Java 8路数据库的潜力,但是我们确实需要一种智能的方式来处理此性能问题。 在本文中,我将向您展示我们如何使用Stream API的自定义委托人来解决此问题,以在后台处理流,并优化生成SQL查询。

假设您在远程主机上的数据库中有一个表User,而您想打印出所有70岁以上用户的名字。 使用Speedment做到这一点的Java 8方法是:

final UserManager users = speedment.managerOf(User.class);
users.stream().filter(User.AGE.greaterThan(70)).map(User.NAME.get()).forEach(System.out::println);

看到此代码可能会在一开始让您不寒而栗。 我的程序会从数据库下载整个表并在客户端中对其进行过滤吗? 如果我有1亿用户怎么办? 网络延迟足以杀死应用程序! 嗯,实际上不是,因为正如我之前所说,Speedment在终止之前会分析流。

让我们看看幕后发生的事情。 UserManager中的.stream()方法返回Stream接口的自定义实现,该接口包含有关该流的所有元数据,直到该流关闭为止。 终止操作可以使用该元数据来优化流。 调用.forEach时,管道将如下所示:

sobtuqGZUFfgKbwcAJzjyJQ

终止操作(在这种情况下,ForEach随后将开始向后遍历管道以查看是否可以优化。首先,它遇到了从User到String的映射。由于User.NAME字段,Speedment将其识别为Getter函数。可以将Getter解析为SQL,因此将终止操作切换为NAME列的Read操作,并删除map操作。

s3u1Dnn2G7GbNetIPbwO3Wg

接下来是.filter操作。 过滤器也被识别为自定义操作,在这种情况下为谓词。 由于这是一个自定义实现,因此它可以包含在SQL查询中使用它所需的所有必要元数据,因此可以安全地从流中将其删除并附加到Read操作中。

sbmtrXGNs-hqbWxzhUaGH_A

现在,当终止操作查找管道时,它将找到流的源。 到达源后,将把Read操作解析为SQL并提交给SQL管理器。 然后,将使用原始的.forEach使用者终止生成的Stream <String>。 为上面显示的确切代码生成SQL是:

SELECT `name` FROM `User` WHERE `User`.`age` > 70;

Java代码中无需使用任何更改或特殊操作!

这是一个简单的示例,说明如何通过使用Speedment中的自定义实现在执行之前简化流。 欢迎您查看源代码,并找到使用此技术的更好方法。 它确实帮助我们提高了系统性能,并且可能适用于任何分布式Java-8方案。

直到下一次!

翻译自: https://www.javacodegeeks.com/2016/02/parsing-java-8-streams-sql.html

sql 解析 java

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

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

相关文章

杭州电子科技大学保研计算机,杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则...

杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则信息&#xff0c;是考研之前需要获取相应的考研信息&#xff0c;比如考试大纲、招考专业、招考目录等等基本信息&#xff0c;这些内容是进行考研前期工作的必要准备。考生可以从各院校的研招网进行查询&#xff0…

返回路径平面上的间隙_裁切机的上刀下刀如何调整?

每天都在使用裁切机时&#xff0c;由于各种因素往往会出现上刀、下刀现象(也称凸刀、凹刀现象)&#xff0c;给后面的套准带来困难。在此小编对上刀、下刀现象的产生原因做一分析与总结。01千斤压力不够(1)机械压力弹簧弹力不够。此时必须增大压力&#xff0c;如果增大到最大位置…

pcb板材的tg是什么_做到这6点,PCB过回焊炉不会出现板弯及板翘!

【维文信PCBworld】在PCB板子过回焊炉容易发生板弯及板翘&#xff0c;大家都知道&#xff0c;那么如何防止PCB板子过回焊炉发生板弯及板翘&#xff0c;下面就为大家阐述下&#xff1a;1.降低温度对PCB板子应力的影响既然「温度」是板子应力的主要来源&#xff0c;所以只要降低回…

java-ee-api_刷新器-Java EE 7概览

java-ee-api随着红帽JBoss企业应用平台7&#xff08;EAP 7&#xff09;的迫在眉睫&#xff0c;甚至WebLogic Server刚刚获得Java EE 7认证&#xff0c;我认为现在应该是时候对Java Enterprise Edition 7进行一些更新了。功能&#xff0c;并指向更多资源。 Java EE 7 –开发人员…

层 数据仓库_小尝试:基于指标体系的数据仓库搭建和数据可视化

关于作者&#xff1a;小姬&#xff0c;某知名互联网公司产品专家&#xff0c;对数据采集、生产、加工有所了解&#xff0c;期望多和大家交流数据知识&#xff0c;以数据作为提出好问题的基础&#xff0c;挖掘商业价值。0x00 前言我将整理文章分享数据工作中的经验&#xff0c;因…

计算机中级职称报考入口,2020年9月计算机职称考试报名流程(附入口)

2020年9月计算机等级报名公告正在陆续公布&#xff0c;计算机等级考试网上怎么报名&#xff1f;小编为大家整理计算机等级报名流程如下&#xff1a;2020年9月计算机等级报名流程一、注册通行证考生登入报名网页后&#xff0c;点击“用户注册”按钮&#xff0c;根据网页提示&…

简单工厂抽象工厂工厂方法_让工厂美丽

简单工厂抽象工厂工厂方法每个名副其实的Java程序员都知道Factory Pattern 。 这是一种便捷&#xff0c;标准化的方法&#xff0c;它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合。 但是&#xff0c;在使用大型系统时&#xff0c;该模式确实会向系统添加很多样板代码…

内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0

内蒙古大学计算机组成原理期末练习0 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分第 1 页 共 4 页 《《计算机组成原理计算机组成原理》》期末练习期末练习 班级 专业 姓名 学号 编号 …

dev的编辑器不支持getchar吗_“两头婚兴起”:你支持不娶不嫁,孩子随父姓也随母姓吗?...

何为两头婚&#xff1f;简单来说就是男不娶&#xff0c;女不嫁&#xff0c;没有彩礼也没有嫁妆的说法。男女俩人结婚之后没有谁到谁家里之说&#xff0c;两夫妻过自己的小日子&#xff0c;与各自的原生家庭保持一定的联系。婚后生育两个孩子&#xff0c;一个随父姓&#xff0c;…

全国计算机证件照要露耳朵吗,结婚证照片要露耳朵么 结婚登记照露一只耳朵行吗...

结婚证件照&#xff0c;这是可以在在民政局里面照的&#xff0c;也是可以在外面的影楼照的&#xff0c;在外面影楼照的话&#xff0c;照出来会比较好看&#xff0c;就是价格有点贵。结婚证上面的照片是证件照&#xff0c;所以是有一定的要求的。露一只耳朵行不行呢&#xff1f;…

findfirst_当心findFirst()和findAny()

findfirst过滤Java 8 Stream &#xff0c;通常使用findFirst()或findAny()来获取在过滤器中幸存的元素。 但这可能并不能真正实现您的意思&#xff0c;并且可能会出现一些细微的错误。 那么 从我们的Javadoc&#xff08; 此处和此处 &#xff09;可以看出&#xff0c;这两种方…

java流式传输对象_使用Java 8在地图上流式传输

java流式传输对象在本文中&#xff0c;我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流&#xff0c;并将Stream接口扩展为MapStream&#xff01; 即使在复杂的情况下&#xff0c;此添加将使保持流的具体性和可读性变得更加容易。 希望这将允许您继续流式传…

oracle11g支持xp吗_拔掉U盘前一定需要安全弹出吗?

相信每一个使用过U盘的人&#xff0c;都经历过不安全弹出USB设备就直接拔掉&#xff0c;然后被电脑无情提示没有正确弹出USB设备的状况。拔掉U盘前点击安全弹出&#xff0c;已经成了一种默认的操作。那么&#xff0c;问题来了&#xff0c;拔掉U盘前真的需要安全弹出吗&#xff…

java中使用kotlin_在Kotlin中使用libGDX

java中使用kotlin最近&#xff0c;我一直在阅读有关不同语言的信息&#xff0c;以及它们可以为已经拥挤的软件开发人员带来什么&#xff0c;并且一种语言对我来说很突出&#xff1a;Kotlin。 &#xff08; https://kotlinlang.org/ &#xff09; 这是一种相对较新的语言&#…

同时防服务器维修,加强服务器日常运维,避免宕机灾难发生

原标题&#xff1a;加强服务器日常运维&#xff0c;避免宕机灾难发生服务器作为我们日常网络的支撑&#xff0c;可以说是24小时的全天候运转。在这种无休止的“加班”的状态下&#xff0c;服务器必然容易出问题&#xff0c;一旦发生服务器宕机就会造成整个网络的瘫痪&#xff0…

basemap安装_【我是解决安装问题系列_1】Mac python basemap安装

「2020/3/21更新」 附basemap网盘下载地址⏬Python需要跳过的安装的坑太太太太多了!!!!!最近看《利用python进行数据分析》这本书&#xff0c;到可视化的部分&#xff0c;看着最后的例子地图挺酷炫的&#xff0c;跟着敲代码的过程中&#xff0c;发现有时候不是你不会写&#xf…

nfs服务器远程访问,NFS远程共享存储

原标题&#xff1a;NFS远程共享存储构建储NFS远程共享存因为NFS有很多功能&#xff0c;不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息&#xff0c;这样就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。那RPC和NFS之间又是如何之间相互通…

ntp服务器查看终端,使用命令行界面使用NTP服务器在Windows中同步时间 | MOS86

即使使用简单的3V锂电池(CR2032)关闭电脑&#xff0c;每台台式电脑也能保持正确的时间。但这不是一个可充电电池&#xff0c;所以一年左右就停止工作了。您可以轻松地替换此单元格&#xff0c;但更换单元后&#xff0c;必须使用NTP服务器更新时间&#xff0c;以便Windows PC保持…

concat合并的数组会有顺序么_JS 数组操作 记录 笔记

Array数组的方法Mutator方法————"突变方法"会改变数组自身的值&#xff1b;Accessor方法————"访问方法"不会改变数组自身的值&#xff1b;Iteration方法————"遍历的方法" Establish方法————"创建新方法"Mutator方法(会…

服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

我们都知道SSL认证能够分成SSL双向认证和SSL单向认证。那么&#xff0c;什么是SSL双向认证&#xff1f;SSL双向认证过程又是怎样的&#xff1f;小编就在接下来的内容为各位详细讲述。什么叫SSL双向认证SSL双向认证则是需要是服务端需要客户端提供身份认证&#xff0c;只能是服务…