iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Java中怎么利用Streams对数据库进行查询操作
  • 635
分享到

Java中怎么利用Streams对数据库进行查询操作

2024-04-02 19:04:59 635人浏览 八月长安
摘要

Java中怎么利用Streams对数据库进行查询操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。示例数据库我们使用的示例数据库是Saki

Java中怎么利用Streams对数据库进行查询操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

示例数据库

我们使用的示例数据库是Sakila。它有Film(影片), Actor(演员), CateGory(类别)等表格,下载地址: https://dev.Mysql.com/doc/index-other.html

步骤一:连接数据库

我们使用 Speedment Initializer 配置pom.xml文件,点击下载后,将得到一个带有自动生成Main.java文件的项目文件夹。

然后,解压文件夹zip.,打开命令行,然后转到pO.xml文件所在的位置。输入以下命令:

mvn speedment:tool

Speedment将被启动,会提示您输入授权码。选择“Start Free”,您将获得免费许可。然后便可以连接数据库开始使用。

步骤二:生成代码

当数据库开始加载schema data时,便可以点击"Generate"生成完整的Java域模型。

步骤三:编写应用程序代码

步骤二中还会自动生成一个Speedment的生成器。打开Main.java文件,将main()方法中的代码替换成以下代码:

SakilaApplication app = new SakilaApplicationBuilder()
    .withPassword("sakila-passWord") // Replace with your own password
    .build();

接下来,我们将编写一个打印出所有影片的应用程序。当然这只是一个小程序,我们还要对其进行改进。

// Obtains a FilmManager that allows us to
// work with the "film" table
FilmManager films = app.getOrThrow(FilmManager.class);
// Create a stream of all films and print
// each and every film
films.stream()
    .forEach(System.out::println);

运行时,Java stream将自动生成sql。为了查看SQL代码,需要修改Application Builder,并使用STREAM日志类型开启日志记录。

SakilaApplication app = new SakilaApplicationBuilder()
    .withPassword("sakila-password")
    .withLogging(ApplicationBuilder.LogType.STREAM)
    .build();

以下是运行应用程序时的SQL代码:

SELECT
    `film_id`,`title`,`description`,`release_year`,
    `language_id`,`original_language_id`,`rental_duration`,`rental_rate`,
    `length`,`replacement_cost`,`rating`,`special_features`,`last_update`
 FROM
     `sakila`.`film`,
values:[]

SQL代码会因您选择的数据库类型而异(例如mysql,MariaDB,postgresqloracle,MS SQL Server,DB2,AS400等),且这些变化都是自动的。

上面的代码将产生以下输出(简洁为主)

FilmImpl { filmId = 1, title = ACADEMY DINOSAUR, ..., length = 86, ... }
FilmImpl { filmId = 2, title = ACE GOLDFINGER, ..., length = 48, ...}
FilmImpl { filmId = 3, title = ADAPTATION HOLES, ..., length = 50, ...}
...

步骤四:使用过滤器

Speedment流包括过滤器在内的所有流操作。假设我们只想过滤掉那些超过60分钟的影片,可以通过以下代码来实现:

films.stream()
    .filter(Film.LENGTH.greaterThan(60))
    .forEach(System.out::println);

生成SQL:

SELECT
    `film_id`,`title`,`description`,`release_year`,
    `language_id`,`original_language_id`,`rental_duration`,`rental_rate`,
     `length`,`replacement_cost`,`rating`,`special_features`,
    `last_update`
FROM
    `sakila`.`film`
WHERE
    (`length` > ?),
 values:[60]

生成输出:

FilmImpl { filmId = 1, title = ACADEMY DINOSAUR, ..., length = 86, ... }
FilmImpl { filmId = 4, title = AFFAIR PREJUDICE, ..., length = 117, ...}
FilmImpl { filmId = 5, title = AFRICAN EGG, ... length = 130, ...}

可以通过组合过滤器来创建更复杂的表达式,如下所示:

films.stream()
    .filter(
        Film.LENGTH.greaterThan(60).or(Film.LENGTH.lessThan(30))
    )
    .forEach(System.out::println);

这将回收掉那些不到30分钟或者超过一小时的影片。这时检查您的日志文件,您将发现这个流已生成SQL。

步骤五:定义元素的顺序

默认情况下,出现在流中的元素是未被定义的。想要定义一个特定顺序,您需要将SORTED()操作应用到这样的流:

films.stream()
    .filter(Film.LENGTH.greaterThan(60))
    .sorted(Film.TITLE)
    .forEach(System.out::println);

生成SQL

SELECT
    `film_id`,`title`,`description`,`release_year`,
    `language_id`,`original_language_id`,`rental_duration`,`rental_rate`,
    `length`,`replacement_cost`,`rating`,`special_features`,
    `last_update`
FROM
    `sakila`.`film`
WHERE
    (`length` > ?)
ORDER BY
    `length` ASC,
values:[60]

生成输出:

FilmImpl { filmId = 77, title = BIRDS PERDITION,..., length = 61,...}
FilmImpl { filmId = 106, title = BULWORTH COMMANDMENTS,..., length = 61,}
FilmImpl { filmId = 114, title = CAMELOT VACATION,..., length = 61,..}
...

您还可以组合多种分类机来定义主顺序、次顺序等。

films.stream()
    .filter(Film.LENGTH.greaterThan(60))
    .sorted(Film.LENGTH.thenComparing(Film.TITLE.reversed()))
    .forEach(System.out::println);

这将按照LENGTH顺序(升序)和TITLE顺序(降序)对影片元素进行排序。您可以对数量字段进行任意组合。

注意:如果您按升序组成两个或两个以上字段时,你应该使用.comparator(). I.e.字段方法。例如:sorted(Film.LENGTH.thenComparing(Film.TITLE.comparator()))。

步骤六:避免大对象块(Large Object Chunks)

人们一般会对结果进行分页来避免使用不必要的大对象块(Large Object Chunks)。假设我们希望在每页看到50个元素,我们可以通过以下代码来实现:

private static final int PAGE_SIZE = 50;
public static <T> Stream<T> page(
    Manager<T> manager,
    Predicate<? super T> predicate,
    Comparator<? super T> comparator,
    int pageNo
) {
    return manager.stream()
        .filter(predicate)
        .sorted(comparator)
        .skip(pageNo * PAGE_SIZE)
        .limit(PAGE_SIZE);
}

该方法可以使用任意过滤器对任意表进行随意排序。

例如,调用:

page(films, Film.LENGTH.greaterThan(60), Film.TITLE, 3)

将回收掉那些超过60分钟的影片流,并按照第三页的标题进行排序(即,跳过150部影片并显示以下50部影片)。

生成SQL

SELECT
    `film_id`,`title`,`description`,`release_year`,
    `language_id`,`original_language_id`,`rental_duration`,`rental_rate`,
    `length`,`replacement_cost`,`rating`,`special_features`,
    `last_update`
FROM
    `sakila`.`film`
WHERE
    (`length` > ?)
ORDER BY
     `title` ASC
LIMIT ? OFFSET ?,
values:[60, 50, 150]

生成输出

FilmImpl { filmId = 165, title = COLDBLOODED DARLING, ... length = 70,...}
FilmImpl { filmId = 166, title = COLOR PHILADELPHIA, ..., length = 149... }
FilmImpl { filmId = 167, title = COMA HEAD, ... length = 109,...}
...

同样,如果我们使用了另一种数据库类型,那么SQL代码就会不同。

步骤七: In-JVM-Memory加速

由于您在初始化程序中使用了标准配置,所以In-JVM-memory加速在POM.XML文件中就被启动。如果要激活应用程序中的加速,只需要将初始代码修改成如下代码:

SakilaApplication app = new SakilaApplicationBuilder()
    .withPassword("sakila-password")
    .withBundle(InMemoryBundle.class)
    .build();
    
    // Load data from the database into an in-memory snapshot
    app.getOrThrow(DataStoreComponent.class).load();

关于Java中怎么利用Streams对数据库进行查询操作问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: Java中怎么利用Streams对数据库进行查询操作

本文链接: https://www.lsjlt.com/news/56764.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中怎么利用Streams对数据库进行查询操作
    Java中怎么利用Streams对数据库进行查询操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。示例数据库我们使用的示例数据库是Saki...
    99+
    2022-10-18
  • 利用mybatis怎么对数据库进行增删改查操作
    这篇文章将为大家详细讲解有关利用mybatis怎么对数据库进行增删改查操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。所需要用到的其他工具或技术:项目管理工具 : Maven测试运行工具 ...
    99+
    2023-05-31
    mybatis
  • 利用hibernate怎么对数据库进行增删改查操作
    本篇文章给大家分享的是有关利用hibernate怎么对数据库进行增删改查操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hibernate对数据删除操作删除User表中个一条...
    99+
    2023-05-31
    hibernate
  • Android中怎么利用LitePal对数据库进行操作
    Android中怎么利用LitePal对数据库进行操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先在app/build.grade文件中编辑dependencies{.....
    99+
    2023-06-04
  • 怎么在java项目中利用mongodb进行查询操作
    本篇文章为大家展示了怎么在java项目中利用mongodb进行查询操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java 中mongodb的各种操作查询的实例详解一. 常用查询: 查询一条数据:...
    99+
    2023-05-31
    java mongodb
  • 怎么使用PHP查询数据库数值进行操作
    这篇文章主要介绍“怎么使用PHP查询数据库数值进行操作”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP查询数据库数值进行操作”文章能帮助大家解决问题。首先,我们需要连接到数据库。PHP提...
    99+
    2023-07-05
  • ODBC中怎么利用CRecordset类对数据库进行操作
    ODBC中怎么利用CRecordset类对数据库进行操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1.MFC中的ODBC类...
    99+
    2022-10-18
  • php怎么进行数据库查询和修改操作
    PHP 是一种广泛使用的服务器端脚本语言,用于 Web 开发。当开发者需要从数据库中读取数据或对数据库进行修改时,PHP 提供了一些简单而强大的功能,这些功能使得查询和修改数据库变得轻松自如。本文将介绍一些 PHP 中常用的数据库查询和修改...
    99+
    2023-05-14
  • 利用Java怎么对redis进行增删查改操作
    利用Java怎么对redis进行增删查改操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先,需要在windows下配置一个redis环境,然后需要导入:je...
    99+
    2023-05-31
    java redis
  • 怎么在MySQL数据库中进行查询并删除操作
    本篇内容介绍了“怎么在MySQL数据库中进行查询并删除操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-05-25
    mysql
  • 如何使用PHP查询数据库数值进行操作
    PHP是一种非常流行的服务器端编程语言,广泛用于Web开发。在Web开发中,PHP通常与数据库一起使用,以更好地管理和操作数据。在本文中,我们将介绍如何使用PHP查询数据库数值进行操作。首先,我们需要连接到数据库。PHP提供了许多库和扩展来...
    99+
    2023-05-14
    php 数据库
  • 使用phonegap怎么对数据库进行操作
    使用phonegap怎么对数据库进行操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实例如下:<!DOCTYPE html> ...
    99+
    2023-06-09
  • java怎么对数据库进行增删改查
    在Java中进行数据库的增删改查操作,通常需要使用JDBC(Java Database Connectivity)来实现。以下是一个...
    99+
    2023-08-08
    java 数据库
  • 怎么在Java中利用File对文件进行操作
    本篇文章为大家展示了怎么在Java中利用File对文件进行操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.1java.io.FileFile用于表示文件系统中的一个文件或目录通过File可以:...
    99+
    2023-05-31
    java file
  • 使用Node怎么对MongoDB数据库进行操作
    这篇文章给大家介绍使用Node怎么对MongoDB数据库进行操作,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.使用 MongoDB模块 进行操作 首先在工作目录安装 mo...
    99+
    2022-10-18
  • 使用gorm怎么对MySql数据库进行操作
    本篇文章给大家分享的是有关使用gorm怎么对MySql数据库进行操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、表中字段区分大小写的设置在使用gorm查询的时候,会出现账...
    99+
    2023-06-07
  • 在Android开发中怎么对SQLite数据库进行增删改查操作
    在Android开发中怎么对SQLite数据库进行增删改查操作?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。      一.创建一个自定义数据库&...
    99+
    2023-05-31
    sqlite android lite
  • 利用java怎么对oracle或mysql数据库进行连接
    这篇文章给大家介绍利用java怎么对oracle或mysql数据库进行连接,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法如下:package com.nuo.test.Connection;import jav...
    99+
    2023-05-31
    java oracle mysql
  • 怎么在MySQL数据库中进行时间查询数据
    这篇文章主要介绍“怎么在MySQL数据库中进行时间查询数据”,在日常操作中,相信很多人在怎么在MySQL数据库中进行时间查询数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2023-05-25
    mysql
  • Java中Word怎么利用com进行操作
    Java中Word怎么利用com进行操作?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实例代码如下:import com.jacob.activeX.ActiveXComp...
    99+
    2023-05-31
    java com组件 word
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作