您的位置:网站首页 > Java教程 > 正文

Java 8:如何使用流方式查询数据库?

类别:Java教程 日期:2018-2-26 13:24:34 人气: 来源:

  Speedment 是使用 ORM 方式操作数据库的一种选择,以前我们需要100行操作数据库的 Java 代码,在 Java 8中,可能只需要一行代码。

  在90年代末,我使用 Java 开发数据库应用的时候,许多代码逻辑都需要自己来编写,比如捕获异常、类型转换等,经过许多改动,最后这些代码变得难以和扩展。

  由于关系型数据库操作语言和面向对象语言之间的差异,如今我们仍然需要花费许多时间建立数据库与 Java 应用之间互相沟通的桥梁。通常,我们可以编写自己的映射层(mapping layer),或者使用第三方的 ORM(Object Relational Mapper)对象关系映射框架,比如 Hibernate。ORM 框架虽然使用起来很方便,但是如何正确地配置和提高框架操作数据库的性能却不太容易,ORM 框架往往会使我们的应用性能下降。

  最近,我贡献了一个新的开源项目——Speedment,它能使我们使用 Java 8 开发数据库应用程序变得更为快捷和高效。

  Speedment 是一个开源项目,它是一个基于 Java 8 的新特性开发的新的 Java 库,从这个项目开发开始,它的代码就全部使用 Java 8来编写。Speedment 使用标准流查询数据库,这使得开发者不需要学习任何新的查询 API ,以及不必考虑 JDBC 、ResultSet 和其他有关数据库的指定的操作。

  Speedment 会根据现有数据库来自动生成代码。由于它的这种方式,开发者不需要编写一行关于数据库实体(database entities)的代码。它生成的代码中也包含 JavaDocs 帮助文档,这使开发者不需要编写关于 User 或者 Book 等对象的实体类。取而代之地,我们只需要创建或者使用一个现有的数据库,然后用 Speedment 去连接它,接着 Speedment 会分析数据库结构来生成实体类的代码。

  在接下来的例子中,我们会使用一个名为 “hare” 的数据库来给大家演示 Speedment 的使用方式。该数据库的表结构如下:

  下面是 Speedment 根据数据库信息生成的一个相应的实体类(为简洁起见,我们将 JavaDocs 在这里移除了):

  我将用一篇单独的文章介绍 find*() 方法的用法,它可以被用来代替 SQL joins 操作。

  的代码看起来已经遍历了 hare 数据库表的所有行,但实际上并不是这样的。 Stream 是智能的,当它到达 collect() 操作的时候,会分析 filter 操作,并推断出 hare.age 大于8的列,因此会节省 hares 的流操作,产生与 “select * from hare where age 8” 操作一样的效果。如果你使用了多个 filters,他们会被合并起来以节省流操作。下面是另一种用流方式进行多个操作的例子:

  在的代码中,当流到达 count() 操作时,它将检查它自己的管道。首先会推断例子中的 AGE 操作,其次在不改变 count() 结果的情况下,会推断 mapToInt() 和 sorted() 操作,这些操作可以被消除,因此这段代码的操作被节省为 “select count(*) from hare where age 8”。这意味着您可以使用 Java 8 流而你不必如此在意流是如何转换为SQL的。

  如果你想学习如何使用 Speedment 的 API 和在项目中如何使用 Speedment,可以访问网址,并可以在gitter上发表评论,也可以从 GitHub 上下载Speedment 的源码,来贡献你自己的代码。

  回顾早期的一些老项目,一个超过100行代码的数据库类,现在可以使用 Java 8 缩减成1行代码。那是反转后的摩尔定律,在14年内(=7摩尔周期),行数大约减半了七次。这就是进步!

  OneAPM 为您提供端到端的Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 从来没有如此简单。想阅读更多技术文章,请访问OneAPM 技术博客。

  Java 基础思维导图,让 Java 不再难懂 - 工具资源 - 掘金思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具。了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图...

  百战程序员_ Java1573题 QQ群:603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注国内最牛七星级团队马士兵、高淇等11位十年开发经验专...

  用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...

  1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。 1、一个.java源文件中是否可以包括多个类(不是内部类)?有什么? 可以有多个类,但只能有一个publ...

  很多人在顺境时比较容易放松对自己的要求,在逆境时更愿意发奋努力,这似乎是人的天性。小时候语文课里有则寓言叫《亡羊补牢》,这则寓言告诉我们有了错误要及时改进,以免损失更大。但其实大部分人都知道,在羊还没失去时,就把羊圈建得牢固,可能根本就不会有“亡羊”的事发生。 ...

  一 春天的暗示 穿透夜晚的声音,像手心一样冰凉! 我不由自主的四处张望, 这沉重的叹息来自何方? 我的悲伤,我的,我的, 我的疼痛,让我发不出一丝声响。 我竖直着脖子在的上行走, 胃里的燃烧的怒火让我想起了橘子。 所以,我要报复这条, 我要跳到...

  夏日炎炎,一出门就全部武装,各种能用的道具都用上了,可是脸上的斑还是不断的增长,随着年龄的增长,很多女性朋友都会出现脸上长斑的问题,形形色色的斑点遮盖了肌肤最初的形态,令人不禁感慨岁月的无情和,其实,长斑不仅意味着容颜的缺憾,也一定程度上反映了人体的健康状态,如何快速祛...

  

关键词:java8 简书
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved