Java 8:再见手册SQL,您好!

大多数用Java编写的应用程序都需要某种形式的数据存储。 在小型应用程序中,这通常是通过使用普通SQL查询的原始JDBC连接来实现的。 另一方面,较大的系统通常使用对象关系映射(ORM)框架来处理数据库通信。 这两种方法都有优点和缺点,但两者都倾向于编写许多样板代码,而这些样板代码在每个代码库中看起来大致相同。 在本文中,我将展示另一种使用名为Speedment的开源项目轻松进行数据库通信的方法。

什么是速度?

Speedment是一个开发人员工具,可以从您的SQL元数据生成Java类。 生成的代码处理从建立连接到数据检索和持久性的所有事务。 该系统旨在与Java 8 Stream API完美集成,因此您可以使用lambda来查询数据库,而无需一行SQL。 创建的流在后台进行了优化,以减少网络负载。

设置项目

在本文中,我将编写一个小型应用程序,询问用户的姓名和年龄并将其保存在MySQL数据库中。 首先,我们将定义数据库架构。 打开您的MySQL控制台并输入以下内容:

CREATE DATABASE hellospeedment;
USE hellospeedment;CREATE TABLE IF NOT EXISTS `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(32) NOT NULL,`age` int(5) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

接下来,我们将创建我们的java项目。 启动您最喜欢的IDE,然后从Archetype创建一个新的Maven项目。 原型是可以用于快速定义新的Maven项目的模板项目。 不同的IDE之间的确切用法有所不同。 必须输入以下信息:

资料库 https://repo1.maven.org/maven2
群组编号 加速
ArtifactId 速度原型MySQL
2.3.0

类似的原型也可用于PostgreSQL和MariaDB 。

在NetBeans上,原型通常位于从Maven Central Repository索引的默认原型中。 创建项目时,您应该具有以下内容:

新项目

启动Speedment UI

现在,已经创建了项目,是时候启动Speedment用户界面了。 这是通过执行speedment:gui-maven目标来完成的。 在NetBeans和IntelliJ IDEA中,可以在IDE中找到可用的Maven目标的列表。 在Netbeans中,可以在“导航器”窗口中找到它(通常位于屏幕的左下角)。 必须选择项目根节点才能显示目标。 在IntelliJ中 ,可以在屏幕最右侧的“ Maven项目”选项卡下找到目标。 您可能需要最大化“项目名称”,“插件”和“ speedment-maven-plugin”节点才能找到它。 据我所知,在Eclipse中 ,您没有目标列表。 相反,您将必须手动定义目标。 Speedment GitHub Wiki上有一个执行此操作的教程。

首次启动用户界面时,它将询问您的电子邮件地址。 之后,您可以连接到数据库。

连接

连接对话框将仅允许您在可以使用装入的JDBC驱动程序连接到的数据库之间进行选择。 例如,如果要使用PostgreSQL数据库,则应将PostgreSQL驱动程序添加到pom.xml文件中speedment-maven-plugin部分的<dependencies> -tag中,然后重新运行UI。

连接到数据库后,将打开主窗口。 在左侧,您可以看到数据库的树状视图。 中间是工作空间,可以在其中配置数据库连接,代码生成和实体命名等内容。 您可以通过选择树中的其他节点来选择要配置项目的哪一部分。

主屏幕

在这种情况下,我们只需按工具栏中的“生成”按钮即可使用默认设置生成项目。 现在,我们可以关闭UI并返回到我们的IDE。

编写申请

现在,当Speedment生成了与HelloSpeedment数据库进行通信所需的所有样板代码时,我们可以集中精力编写实际的应用程序。 让我们打开由Maven原型创建的Main.java文件,并修改main()方法。

public class Main {public static void main(String... params) {Speedment speedment = new HellospeedmentApplication().withPassword("secret").build();Manager<User> users = speedment.managerOf(User.class);}
}

在Speedment中,使用构建器模式定义了应用程序。 可以使用不同的withXXX()方法来完成运行时配置,并且在调用build()方法时平台将最终完成。 在这种情况下,我们使用它来设置MySQL密码。 Speedment永远不会在配置文件中存储诸如数据库密码之类的敏感信息,因此您将必须拥有不受保护的数据库或在运行时设置密码。

我们接下来要做的就是监听用户的输入。 当用户启动程序时,我们应该向他们打招呼,然后询问他们的姓名和年龄。 然后,我们应该将用户信息保留在数据库中。

final Scanner scn = new Scanner(System.in);System.out.print("What is your name? ");
final String name = scn.nextLine();System.out.print("What is your age? ");
final int age = scn.nextInt();try {users.newEmptyEntity().setName(name).setAge(age).persist();
} catch (SpeedmentException ex) {System.out.println("That name was already taken.");
}

如果持久性失败,则抛出SpeedmentException。 例如,如果由于架构中的名称列设置为UNIQUE,已经存在具有该名称的用户,则可能会发生这种情况。

读取持久数据

还记得我刚开始告诉您Speedment如何与Java 8中的Stream API很好地契合吗? 让我们尝试一下! 如果我们多次运行该应用程序,则可以用一些用户填充数据库。 然后,我们可以使用相同的用户管理器查询数据库。

System.out.println(users.stream().filter(User.ID.lessThan(100)).map(User::toJson).collect(joining(",\n    ", "[\n    ", "\n]"))
);

这将产生如下结果:

[{"id":1,"name":"Adam","age":24},{"id":2,"name":"Bert","age":20},{"id":3,"name":"Carl","age":35},{"id":4,"name":"Dave","age":41},{"id":5,"name":"Eric","age":18}
]

摘要

本文展示了使用Speedment编写数据库应用程序有多么容易。 我们已经使用maven原型创建了一个项目,启动了Speedment UI作为maven目标,建立了与本地数据库的连接并生成了应用程序代码。 这样,我们就可以在没有一行SQL的情况下完成数据持久性和查询!

这就是这个时间了。

PS: Speedment 2.3前几天汉密尔顿刚发布,其中包含大量非常酷的功能,可用于操纵代码生成器以满足您的各种需求。 一探究竟!

翻译自: https://www.javacodegeeks.com/2016/04/java-8-bye-manual-sql-hello-speedment.html

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

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

相关文章

this指针 java_彻底理解Java中this指针

每次看到Java中的this指针&#xff0c;总摸不着头绪。在网上看了很多人的讲解&#xff0c;还是不知道this指针到底是什么东西&#xff0c;今天的的这篇日志可以让你看清this到底是谁。(内容摘自&#xff1a;http://www.mathcs.emory.edu/~cheung/Courses/170.2010/Syllabus/03/…

Spring开发人员知道的一件事

在最近关于&#xff08;核心&#xff09;Spring Framework的培训课程中&#xff0c;有人问我&#xff1a;“&#xff08;Java&#xff09;Spring开发人员是否应该知道一件事&#xff0c;那应该是什么&#xff1f;” 这个问题使我措手不及。 是的&#xff0c;&#xff08;核心&a…

JavaWeb(十七)——JSP中的九个内置对象

一、JSP运行原理 每个JSP 页面在第一次被访问时&#xff0c;WEB容器都会把请求交给JSP引擎&#xff08;即一个Java程序&#xff09;去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) &#xff0c;然后按照servlet的调用方式进行调用。  由于JSP第一次访问…

在Eclipse上创建JSF / CDI Maven项目

当我在研究JSF和CDI示例时&#xff0c;我认为提及创建JSF和CDI Maven项目所需的步骤会很有用。 您可以找到以下步骤。 工具类 默认情况下&#xff0c;M2E插件随附的Eclipse Luna。 因此&#xff0c;无需自己安装插件。 WildFlye8.x。 从主菜单中选择文件->新建->其他。…

luoguP3690 【模板】Link Cut Tree (动态树)[LCT]

题目背景 动态树 题目描述 给定&#xff2e;个点以及每个点的权值&#xff0c;要你处理接下来的&#xff2d;个操作。操作有&#xff14;种。操作从&#xff10;到&#xff13;编号。点从&#xff11;到&#xff2e;编号。 &#xff10;&#xff1a;后接两个整数&#xff08;&a…

java api操作hbase_通过JavaAPI使用HBase

1.准备工作(1) 启动zookeeper服务&#xff0c;我的是在本地启动zookeeper/usr/local/zookeeper/bin$ sudo zkServer.sh start(2) 启动HBase和HBase shell启动HBase:/usr/local/hbase/bin下启动start-hbase.sh启动HBase shell/usr/local/hbase/bin下终端输入hbase shell(3) 工程…

duilib入门简明教程 -- 部分bug (11) (转)

原文转自&#xff1a;http://www.cnblogs.com/Alberl/p/3344886.html 一、WindowImplBase的bug在第8个教程【2013 duilib入门简明教程 -- 完整的自绘标题栏(8)】中&#xff0c;可以发现窗口最大化之后有两个问题&#xff0c;1、最大化按钮的样式还是没变&#xff0c;正确的样式…

在考生文件夹存有JAVA3_注意:下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为J_网考网(Netkao.com)...

【分析解答题】注意&#xff1a;下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为Java_2.java文件&#xff0c;本题功能是完成点定义&#xff0c;并输出点坐标。请完善Java_2.java文件&#xff0e;并进行调试&#xff0c;使程序结果如下&#xff1a;x5 y5点的坐标…

jasperreports_JasperReports JSF插件用例系列

jasperreports这是文章系列的切入点&#xff0c;在该系列文章中&#xff0c;我将尝试介绍JasperReport JSF插件的一些用例&#xff0c;该工具的创建是为了轻松地将为JasperReports设计的业务报告集成到JSF应用程序中。 该系列中描述的所有示例都可以从JasperReports JSF插件网站…

RN 47 中的 JS 线程及 RunLoop

RCBridge 初始化时声明了一个 CADisplayLink _jsDisplayLink [CADisplayLink displayLinkWithTarget:self selector:selector(_jsThreadUpdate:)];在 _jsThreadUpdate 函数中&#xff0c;处理界面更新。这个 CADisplayLink 随后被加到 JS 线程对应的 RunLoop 中。 - (void)ad…

java nginx https_docker nginx 配置ssl,实现https

docker nginx 配置ssl&#xff0c;实现https2019-09-05 16:06:35.0nginx配置https总览在nginx配置ssl实现https&#xff0c;简单来说分为三个步骤&#xff1a;1 上传ssl证书等文件将 1_www.domain.com_bundle.crt 和 2_www.domain.com.key 上传到nginx配置文件的目录旁边。这两…

JavaScript入门几个概念

JavaScript入门几个概念 刚刚入门JavaScript的时候&#xff0c;搞懂DOM、BOM以及它们的对象document和window很有必要。 DOM是为了操作文档出现的API&#xff0c;document是它的一个对象。BOM是为了操作浏览器出现的API&#xff0c;window是它的一个对象。DOM When a web page …

微服务有麻烦吗? Lagom在这里为您提供帮助。 尝试一下!

蛋糕支持。 我们很自豪地宣布&#xff0c;新的Apache许可的微服务框架Lagom可在GitHub上使用 &#xff01; 当其他框架专注于打包和实例启动时&#xff0c;Lagom重新定义了Java开发人员构建基于微服务的应用程序的方式。 服务是异步的。 服务内通信由您管理。 流是开箱即用的。…

海思芯片硬件java加速_海思芯片直播延迟测试结果(小于100毫秒)

背景最近接触了许多客户&#xff0c;许多是做安全方面产品的客户&#xff0c;有些还涉及到jun队后勤的等等&#xff0c;他们普遍对采集延迟&#xff0c;编码延迟&#xff0c;传输延迟等都有很大关注。例如有个客户是做反狙击探测的&#xff0c;那可是与生命相关的&#xff0c;容…

java jsp登录的验证码_Java Web实现登录验证码(Servlet+jsp)

1.生成验证码图片(Servlet)importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.util.Random;importjavax.imageio.ImageIO;importjavax.servlet.ServletException;importjavax.ser…

shrinkwrap_Java EE 6测试第二部分– Arquillian和ShrinkWrap简介

shrinkwrap在Java EE 6测试的第一部分中&#xff0c;我简要介绍了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API&#xff0c;以演示如何启动该容器&#xff0c;如何在项目类路径中查找bean以及运行非常简单的集成测试。 这篇文章重点介绍Arquillian和ShrinkWrap以及为什么它…

java中三个基本框架_对于Java基础者应该如何理解Java中的三大框架!

三大框架&#xff1a;StrutsHibernateSpringJava三大框架主要用来做WEN应用。Struts主要负责表示层的显示Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作)Hibernate主要是数据持久化到数据库再用jsp的servlet做网页开发的时候有个 web.xml的映射文件&#xff0c;里面…

Apache Camel的性能调整思路

时不时地&#xff0c;我会以Camel速度较慢的说法来询问有关优化Camel应用程序的问题。 骆驼只是连接不同系统的粘合剂&#xff0c;路由引擎全都在内存中&#xff0c;并且不需要任何持久状态。 因此&#xff0c;在99&#xff05;的情况下&#xff0c;性能问题是由于其他系统的瓶…

java虚拟机源码怎么看_java虚拟机JVM第4讲:从源代码到机器码,发生了什么?

在上篇文章我们聊到&#xff0c;无论什么语言写的代码&#xff0c;其到最后都是通过机器码运行的&#xff0c;无一例外。那么对于 Java 语言来说&#xff0c;其从源代码到机器码&#xff0c;这中间到底发生了什么呢&#xff1f;这就是今天我们要聊的。如下图所示&#xff0c;编…

java构建内存池队列_池化技术(线程池、连接池、内存池等)

一、池化技术 -简单点来说&#xff0c;就是提前保存大量的资源&#xff0c;以备不时之需。对于线程&#xff0c;内存&#xff0c;oracle的连接对象等等&#xff0c;这些都是资源&#xff0c;程序中当你创建一个线程或者在堆上申请一块内存时&#xff0c;都涉及到很多系统调用&a…