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,一经查实,立即删除!

相关文章

java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制

nb-首先要注意的是,这是使用Java 7完成的,在Java 6中创建透明窗口的方式不同,在更新10之下是不可能的(我相信)基本上,这会创建一个透明窗口,其大小和位置可以覆盖整个虚拟屏幕(也就是说,如果您有多个屏幕,它将覆盖所有虚拟屏幕).然后我使用JPanel作为主要容器来捕获鼠标事件并执…

java实现123n_java三线程交替打印123……n

使用多线程交替打印1--n&#xff0c;a进程打印1,4,7,……(3n1),b进程打印2,7,10,……(3n2),c进程打印3,6,9,……(3n)涉及到多线程的同步&#xff0c;阻塞&#xff0c;wait,notify代码如下Num.javapublic class Num {private int num 0;public Num(int num) {this.num num;}pu…

8月12

MTBF两次故障的时间&#xff0c;时间越长越好。 MTTR两次系统恢复的时间&#xff0c;越短越好 修改完参数后若出现报205的错误&#xff0c;检查路径 控制文件 SQL> show parameter control_files SQL> select * from v$controlfile; 修改路径&#xff1a; $ cd $ORACLE_H…

spring roo_使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry

spring rooSpring Roo是在Java平台上提供快速应用程序开发的工具。 我已经解释了何时使用它&#xff1a; http : //www.kai-waehner.de/blog/2011/04/05/when-to-use-spring-roo 。 Spring Roo目前支持两种针对云计算的解决方案&#xff1a;Google App Engine&#xff08;GAE&a…

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

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

python中的浅拷贝和深拷贝

本篇介绍下python中的深拷贝和浅拷贝&#xff0c;主要从基本类型、类、不可变类型等方面进行介绍。 1.介绍拷贝之前首先应该明白is和的区别&#xff0c;即is表示同一个对象&#xff0c;比较的是值 >>> a 1000 >>> b 1000 >>> a b True >>&…

Spring开发人员知道的一件事

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

mysql匿名事务gtid_MySQL GTID (二)

MySQL GTID 系列之二三.在线将GTID转化为传统模式环境见上篇系列文章关闭GTID,不用停止服务,不影响线上业务3.1 关闭GTID复制,调整为传统复制#SLVAE实例上停止复制STOP SLAVE#SLVAE实例上查看复制的位置SHOW SLAVE STATUS \G# 查看 Master_Log_File 和 Read_Master_Log_Pos对应…

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

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

jrockit_JRockit – JRCMD有用的命令

jrockit自2007年以来&#xff0c;我一直在使用JRockit。我发现它的速度比Hotspot慢&#xff0c;但在诊断和分析问题上总是更好。 从去年夏天开始&#xff0c;我一直在为一家国际电信系统供应商工作。 我们在HP OpenCall融合通信平台之上为电信运营商设计和实施各种产品。 我是开…

java并发问题_并发理论基础:并发问题产生的三大根源

并发问题变幻莫测&#xff0c;一谈到并发就显得非常高深&#xff0c;一般的程序员对于并发问题也是头疼不已&#xff0c;但是随着网络互联越来越普遍&#xff0c;大规模用户访问网站程序也越来越频繁&#xff0c;并发问题又无法避免。在我们解决并发问题前首先要理解产生并发问…

[luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)

传送门 神奇的spfa #include <queue> #include <cstdio> #include <cstring> #include <iostream> #define N 1010 #define max(x, y) ((x) > (y) ? (x) : (y))int n, mx, my; int dis[N][N]; bool map[N][N], vis[N][N]; int dx[4] {0, -1, 0, 1…

在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…

python爬虫多进程_Python爬虫技术--基础篇--多进程

要让Python程序实现多进程(multiprocessing)&#xff0c;我们先了解操作系统的相关知识。Unix/Linux操作系统提供了一个fork()系统调用&#xff0c;它非常特殊。普通的函数调用&#xff0c;调用一次&#xff0c;返回一次&#xff0c;但是fork()调用一次&#xff0c;返回两次&am…

java 电力系统_算法java实现--动态规划--电路布线问题

/** dianlubuxian.java* Version 1.0.0* Created on 2017年11月30日* Copyright ReYo.Cn*/package reyo.sdk.utils.test.dy;/*** 创 建 人&#xff1a;AdministratorReyoAut * 创建时间&#xff1a;2017年11月30日 下午4:58:56** author ReYo* version 1.0*//*** 电路布线问题(…

百度图片网址

http://qcloud.dpfile.com/pc/jPAgaVMWC7zueHYEzky7IUJs0w6QIgvTQ0p08wxCK1OUDUk6-KqvLg70OVUXtjEHTYGVDmosZWTLal1WbWRW3A.jpg转载于:https://www.cnblogs.com/leshen/p/7387677.html

antlr idea 入门_ANTLR:入门

antlr idea 入门这篇文章使您了解ANTLR的基础知识。 以前&#xff0c;我们已经了解了如何将ANTLR设置为外部工具。 在这里&#xff1a; ANTLR外部工具 :) 所以&#xff0c;我们开始…。 什么是ANTLR&#xff1f; •另一个语言识别工具&#xff0c;是一种语言工具&#xff0c;它…

typescript主键自增长

常见的不重复id创建方式有两种&#xff0c;一个是搞一个自增长数列&#xff0c;另一个是采用随机生成一组不可能重复的字符序列&#xff0c;常见的就是UUID了。我们来引入一个uuid的包&#xff1a;npm i --save angular2-uuid&#xff0c;由于这个包中已经含有了用于typescript…

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) 工程…