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

类似的原型也可用于PostgreSQLMariaDB

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值