成为Java流大师–第6部分:使用流创建新的数据库应用程序

您是否曾经想开发数据库应用程序的“快速”版本? 在此动手实验文章中,您将学习一种真正简单而直接的方法。 整个Java域模型将自动为您生成。 您只需连接到现有数据库,然后开始使用Java流进行开发。 例如,您将能够在几分钟内为您现有的数据库创建一个新的Web应用程序。

本文是有关如何成为Java流大师的系列文章中的最后一篇。

第1部分:创建流
第2部分:中级操作
第三部分:终端操作 第4部分:数据库流 第5部分:将联接的数据库表转换为流 第6部分:使用流创建数据库应用程序

到目前为止,您必须在文章和练习中体验Speedment。 为简洁起见,我们没有提供有关如何从头开始的任何描述,而是希望您了解将Java Streams与数据库一起使用的外观。 在本文中,我们将向您展示如何针对在任何数据库上运行的应用程序利用Speedment。 安装仅需几分钟,但由于Streams的表现力和所提供的类型安全性,将为您节省大量时间。

入门

为了帮助您配置项目,Speedment提供了一个项目初始化程序。 填写完项目的详细信息后,它将为您提供一个zip文件,其中包含带有所需依赖项的pom.xmlMain.java启动程序。

1-数据库应用

Speedment初始化程序可用于配置Speedment项目。

单击“下载”后,解压缩文件并在IDE中将其作为Maven项目打开。 在IntelliJ中,最简单的方法是选择“文件”->“打开”,然后在解压缩的项目文件夹中选择pom.xml文件。

如果您想在现有项目中使用Speedment,请通过Initializer配置项目,以确保获得所有需要的依赖项。 然后只需将提供的pom.xml与您当前的pom.xml合并,然后重新导入Maven。

您可能还记得前面的文章,Speedment依赖于自动生成的Java域模型。 因此,在编写应用程序之前,我们需要生成所需的类。 这可以通过使用Speedment Tool来完成,该工具可以通过在终端中运行mvn speedment:tool或通过IDE的内置Maven菜单运行相同的目标来启动。

首先,将要求您注册免费许可证并连接到数据库。 免费许可证可用于所有开源数据库(无限使用)和商业数据库(最大500 MB,不需要任何账单信息)。

免费许可证可用于所有开源数据库(无限制)和商业数据库(最大500 MB,并且不需要账单信息。)

完成注册后,将要求您提供数据库的凭据(确保在初始化程序中选择了正确的DB类型)。 使用您自己的本地数据库,或者使用我们在练习中使用的Sakila数据库运行一些测试。

Sakila数据库凭证
类型: MariaDB
主持人: 35.203.190.83 端口: 3306 数据库名称: sakila 用户: sakila 密码: sakila

2-数据库应用

填写数据库凭据以连接到您的数据源。 (注意:Speedment永远不会存储您的数据库密码)。

单击“连接”按钮将启动Speedment Tool。 它在左侧显示数据库结构,在右侧显示所选表或列的设置。 在这种情况下,默认设置已足够,我们可以继续并按“ Generate”(生成)(如果您的应用程序不需要所有的表和/或列,则可以在生成前禁用它们)。

3-数据库应用

Speedment Tool可视化数据结构,并允许自定义生成的代码。

接下来,Speedment将分析数据库元数据并生成整个Java域模型。 一旦完成此过程,就可以编写应用程序了。 如果签出Main.java文件,您将找到一个包含以下内容的项目启动器:

 public class Main {     public static void main( final String... args) { Speedment app = new MyApplicationBuilder() .withUsername( "your-dbms-username" ) .withPassword( "your-dbms-password" ) .build(); app.stop(); }  } 

从这里开始,您可以使用前面文章中提供的示例来构建应用程序。 因此,我们可以通过键入以下内容来获取胶片表的管理器(胶片表内容的句柄),从而闭合圆:

 FilmManager films = app.getOrThrow(FilmManager. class ); 
 <br> 

使用Manager,我们现在可以查询连接的数据库,如下所示:

 List<Film> filmsTitleStartsWithA = films.stream() .filter(Film.TITLE.startsWith( "A" )) .sorted(Film.LENGTH) .collect(Collectors.toList());   filmsTitleStartsWithA: [ FilmImpl { filmId= 15 , title=ALIEN CENTER, …, rating=NC- 17 , length = 46 , FilmImpl { filmId= 2 , title=ACE GOLDFINGER, …, rating=G, length = 48 ,  … ] 

练习题

这周没有相关的GitHub存储库供您使用。 相反,我们鼓励您将Speedment集成到新的或现有的数据库应用程序中,以尝试您新获得的技能。

额外运动

当您准备好项目时,建议您尝试一下
HyperStream ,尤其是在您拥有大型数据库并且想要提高读取性能的情况下。

HyperStream超越了Stream,并增加了JVM内存功能,将应用程序速度提高了几个数量级。 您只需要在现有的pom.xmlMain.java文件中添加几行代码:

 .withBundle(InMemoryBundle. class ) // add to the app builder ... // Load data from database into materialized view app.getOrThrow(DataStoreComponent. class ) .load(); 
 <br> 

在用户指南中内容。 Stream API保持不变,但性能大大提高。

结论

在过去的六周中,我们展示了Java Stream API的有用性以及如何利用它来用纯Java编写类型安全的数据库应用程序。 如果您想了解有关Speedment的更多信息,请查看用户指南 ,该指南还包含有关Java Streams的更详尽的指南。

最后-感谢您对我们的文章系列感兴趣,非常高兴看到你们中的许多人一直在跟随提供的练习。 编码愉快!

s

Per Minborg
Julia·古斯塔夫森(Julia Gustafsson)

资源资源

有关Speedment Stream JOIN的更多阅读
速度手册
速度初始化器 在GitHub上加速

翻译自: https://www.javacodegeeks.com/2019/11/master-java-streams-creating-database-using-streams.html

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

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

相关文章

快速排序 挖坑_由浅入深玩转快速排序算法

由浅入深玩转快速排序算法快速排序可以说是最快的通用排序算法&#xff0c;它甚至被誉为20世纪科学和工程领域的十大算法之一。在众多排序算法中其无论是时间复杂度还是空间复杂度都颇具优势。作为开发工程师&#xff0c;我们很有必要了解它的思想。接下来将由在下为大家一步步…

代码拾取图片某一点的颜色_RPG游戏开发日志7:道具拾取与存放

本项目同步上传于github和coding上&#xff0c;国内读者可以通过在coding下载项目。也欢迎你加入我的UE4学习交流QQ群&#xff1a;872537977。如果你喜欢我写的文章&#xff0c;也希望你点赞、收藏、转发。谢谢&#xff01;如果你喜欢我写的文章&#xff0c;也希望你点赞、收藏…

使用sstableloader恢复Cassandra Priam备份

之前&#xff0c;我曾写过关于设置Cassandra和Priam进行备份和集群管理的文章。 但是&#xff0c;我在此处提供的用于备份还原的示例并不适用于所有情况&#xff0c;例如&#xff0c;它可能不适用于完全独立的群集。 或者在部分还原到一个表而不是整个数据库的情况下。 在这种…

abp vue如何配置服务地址_DHCP服务如何配置才能尽量减少被攻击的可能

DHCP Snooping是啥&#xff1f;DHCP Snooping是DHCP的一种安全特性&#xff0c;用来保证DHCP客户端能够正确的从DHCP服务器获取IP地址&#xff0c;防止网络中针对DHCP的攻击。DHCP Snooping是如何防止DHCP攻击的呢&#xff1f;DHCP&#xff0c;动态主机配置协议&#xff0c;在I…

通达信缠论买卖点公式_通达信缠论多空主图指标公式

1.高位无量就拿&#xff0c;就算拿错了也要拿着。高位就是说股价处于或者接近历史的最高位。高位无量横盘&#xff0c;是非常典型的上涨中继形态之一&#xff0c;高位的窄幅箱型振荡。2.高位放量出现就要跑,哪怕是跑错也要跑。股价在已经过了一段时间比较大的涨幅后&#xff0c…

python服务器搭建 实战_实战讲解:如何用Python搭建一个服务器

有人说表示只学Python没有用&#xff0c;必须学会一个框架(比如Django和web.py)才能找到工作。其实掌握一个类似于框架的高级工具是有用的&#xff0c;但是基础的东西可以让你永远不被淘汰&#xff0c;不要被工具限制了自己的发展。今天不使用框架&#xff0c;也不使用Python标…

多节锂电串联保护板ic_如何有效保护锂电池板,一款优质的MOS管就能解决

锂电池几乎应用于我们日常接触到的各类电器之中&#xff0c;但如何保护锂电池&#xff0c;你又是否知道呢&#xff1f;其实在锂电池保护板&#xff0c;最主要的元器件是IC与MOS。MOS对锂电池板的保护作用非常大&#xff0c;它可以检测过充电&#xff0c;检测过放电&#xff0c;…

使用Java 8 Lambda表达式将实体映射到DTO

当我们需要将DTO转换为实体&#xff08;Hibernate实体等&#xff09;并向后转换时&#xff0c;我们都会面临混乱的开销代码。 在我的示例中&#xff0c;我将用Java 8演示代码如何变得越来越短。 让我们创建目标DTO&#xff1a; public class ActiveUserListDTO {public Acti…

使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...

1. 介绍一下《大型网站技术架构》这本书可能很多人都看过&#xff0c;小编个人觉得真的是非常不错的一本书。看完这本书后&#xff0c;你会对如何设计大型网站架构&#xff0c;有非常清晰的思路。如果还没有读过的小伙伴&#xff0c;赶紧去读一读吧。PS&#xff1a;小编这里有这…

linux 启动rsyslog服务_linux rsyslog服务部署

软件安装在centos7&#xff0c;rsyslog默认安装&#xff0c;重点在于配置文件。[rootlocalhost samba]# vim /etc/rsyslog.conf$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd…

泰坦尼克号数据_数据分析-泰坦尼克号乘客生存率预测

项目背景目标预测一个乘客是否能够在泰坦尼克号事件中幸存。概述1912年4月15日&#xff0c;泰坦尼克号在首次航行期间撞上冰山后沉没&#xff0c;船上共有2224名人员&#xff08;包括乘客和机组人员&#xff09;&#xff0c;共有1502人不幸遇难。造成海难失事的原因之一是乘客和…

linux mysql服务器安装_Linux服务器MySQL安装

Linux服务器MySQL安装1. MySQL官网下载如图&#xff1a;2. 安装MySQL[rootiZ2zebb0428roermd00462Z /]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch#过滤MySQL&#xff1a;[rootiZ2zebb0428roermd00462Z /]#yum repolist all |grep mysql#ena…

客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)

客户端渲染换为服务器端渲染关于服务器与客户端应用程序渲染的讨论很多。 虽然没有“一刀切”的解决方案&#xff0c;但我将尝试从不同的角度主张客户端&#xff08;特别是AngularJS&#xff09;。 首先是建筑。 建筑 做得好的架构已经明确定义了关注点分离&#xff08;SoS&am…

python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse...

点击上方蓝色字体&#xff0c;选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注&#xff0c;大数据开发领域最强公众号&#xff01;暴走大数据点击右侧关注&#xff0c;暴走大数据&#xff01;ClickHouse相关文章推荐&#xff1a;战斗民族开源 | ClickHo…

php mysql 实现原理_PHP底层和mysql的通信原理

要清楚的几个概念&#xff1a;FPM进程&#xff1a;进程数在php-fpm.ini中设置。没有设置 max_requests &#xff0c;那么进程是不会销毁的&#xff0c;也就是说当一个进程里面出现死循环或者内存溢出等导致进程僵死的情况出现的时候&#xff0c;处理的进程就会少一个。mysql连接…

通过READ-BEHIND CACHE来控制缓慢的生产者

在我们的互联世界中&#xff0c;我们经常使用我们不拥有或无权改善的API中的数据。 如果一切顺利&#xff0c;他们的表现就会很好&#xff0c;每个人都会感到高兴。 但是太多次&#xff0c;我们不得不使用延迟小于最佳延迟的 API。 当然&#xff0c;答案是缓存该数据 。 但是&…

mysql用户名锁定_MySQL用户锁定

修改方式&#xff1a;set global log_warnings2;MySQL 5.5版本官方文档中&#xff0c;并没有用户锁的状态。因此不存在用户会被锁。。The account-locking capability depends on the presence of the account_locked column in themysql.user table. For upgrades to MySQL 5.…

python package和目录_PyCharm中Directory与Python package的区别

对于Python而言&#xff0c;有一点是要认识明确的&#xff0c;python作为一个相对而言轻量级的&#xff0c;易用的脚本语言(当然其功能并不仅限于此&#xff0c;在此只是讨论该特点)&#xff0c;随着程序的增长&#xff0c;可能想要把它分成几个文件&#xff0c;以便逻辑更加清…

mysql过滤器_MYSQL复制过滤器

vim /etc/my.cnf.d/mariadb-server.cnf[mysqld]binlog-do-dbdb1 #白名单模式&#xff0c;仅允许主服务器上生成db1的二进制日志&#xff0c;此选项不支持一行指定多个参数&#xff0c;需要每个参数写一行binlog-do-dbdb2重启服务systemctl restart mariadb.service主服务器…

mysql锁表查询_Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

[背景简介]MySQL是一种开放源代码的关系型数据库管理系统(RDBMS)&#xff0c;因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下&#xff0c;MySQL是管理内容最好的选择。mysql虽然功能未必很强大&#xff0c;但因为它的开源、广泛传播&#xf…