代码人生

使用Spring从数据库自动生成REST API

代码人生 http://www.she9.com 2018-09-01 07:46 出处:网络 编辑:@技术狂热粉
如果您有一个现有的数据库,并且希望编写一个前端来处理它,那么您经常会发现自己花费了数小时来在数据库和前端之间建立连接。如果您可以简单地按下一个按钮并直接生成整个RESTAPI,那么您的时间将得到更有效的利用。

如果您有一个现有的数据库,并且希望编写一个前端来处理它,那么您经常会发现自己花费了数小时来在数据库和前端之间建立连接。如果您可以简单地按下一个按钮并直接生成整个REST API,那么您的时间将得到更有效的利用。


Speedment是一个工具,它使用代码生成来生成基于现有数据库结构的定制领域模型。查询可以直接发送到数据库,也可以从内存中提供,以获得更好的性能。在本文中,我们将使用名为“Spring -generator”的官方插件来免费生成一个完整的Spring应用程序,以提供一个简单的REST API。我们将添加对分页、远程过滤和排序的支持,而无需编写一行代码。

The Database

在下面的示例中,我们将使用Sakila数据库来访问MySQL。Sakila是一个示例数据库,它为电影出租商店建模。它有电影、演员、类别等表格。

Step 1: 创建项目

我们需要的第一件事是配置pom.xml文件使用最新的速度依赖和Maven插件。最快的方法是生成pom。您可以在这里找到使用Speedment Initializer的xml文件。如果您在插件列表中选择“Spring”并按下“Download”,您将得到一个带有Main的完整项目文件夹。自动生成的java文件。

使用Spring从数据库自动生成REST API

使用Spring从数据库自动生成REST API

接下来,打开下载文件的命令行,输入以下命令:


mvn speedment:tool


这将启动加速工具,并提示您输入许可证密钥。简单地选择“开始免费”,你将得到一个免费的许可证!注册之后,就可以连接到数据库并开始工作。

使用Spring从数据库自动生成REST API

Step 2: 生成 Controller

默认情况下,spring-generator插件在普通的加速类之外添加的唯一东西是@Configuration-bean。要实际为表生成控制器,您可以选择树左侧的表,然后在右侧选中“generate @RestController”。

使用Spring从数据库自动生成REST API

这将在它下面启用许多选项,但是我们将在一分钟内讨论这些选项。现在,这就是启用控制器逻辑所需的全部工作。单击“Generate”生成代码。

使用Spring从数据库自动生成REST API

在IDE中,您现在可以看到许多类。如果您从初始化器下载了.zip-file,那么您应该已经有了一个Main.java-file。确保它位于正确的文件夹中,然后构建并运行应用程序。

mvn clean install && java -jar target/example-app-1.0.0-SNAPSHOT.jar

你可以尝试新的REST API调用:

curl localhost:8080/film


Step 3: Using Filters

spring-generator插件的一个很酷的特性是它支持远程过滤。这意味着前端可以将已编码为JSON对象的谓词发送到服务器,服务器将使用经过过滤的JSON响应进行响应。Speedment自动将JSON过滤器解析为SQL选择语句。如果希望每秒处理数千个请求,还可以启用Speedment Datastore直接从内存中处理查询,在这种情况下,JSON过滤器将被解析,以找到合适的内存索引。


JSON过滤器的语法很简单。让电影长度小于60分钟,只需调用:

curl -G localhost:8080/film --data-urlencode 
  'filter={"property":"length","operator":"lt","value":60}'

(-G参数确保命令是作为GET请求而不是POST请求发送的)


可以通过将对象包装在列表中来添加多个过滤器。

curl -G localhost:8080/film --data-urlencode 
  'filter=[{"property":"length","operator":"lt","value":60},
  {"property":"length","operator":"ge","value":30}]'

这将返回所有长度在30到60分钟之间的电影。默认情况下,列表中的所有操作符都被认为与and操作符分离。所有的条件必须申请一个行通过过滤器。要改变这一点,可以使用显式or语句。

curl -G localhost:8080/film --data-urlencode 
  'filter={"or":[{"property":"length","operator":"lt","value":30},
  {"property":"length","operator":"ge","value":60}]}'

这将返回所有小于30分钟或大于1小时的影片。

Step 4: Using Sorters

默认情况下,Speedment以与数据库返回行相同的顺序返回行。但是,如果向表达式添加过滤器,返回的顺序是未定义的。为了确保顺序在前端被很好地定义,因此,您可以向生成的后端发送一个已定义的顺序,告诉它如何对元素进行排序。如果您使用Speedment Datastore来提供内存中的元素,那么它将使用内存中的索引来解析正确的顺序。


下面是一个按长度检索影片的例子。

curl -G localhost:8080/film --data-urlencode 
  'sort={"property":"length"}'

要使影片的顺序相反,您可以这样指定降序顺序:

curl -G localhost:8080/film --data-urlencode 
  'sort={"property":"length","direction":"DESC"}'

您还可以将多个排序器发送到后端,以定义主顺序、次顺序等等。

curl -G localhost:8080/film --data-urlencode 
  'sort=[{"property":"length","direction":"DESC"},
  {"property":"title","direction":"ASC"}]'

Step 5: 分页

pring-generator插件的最后一个特性是能够显示结果,从而避免向浏览器发送不必要的大型对象。这是默认启用的,这就是为什么在查询后端时不会看到超过25个结果。要跳过一些结果(而不是页面),可以指定 ?start=parameter.

curl localhost:8080/film?start=25

这将跳过前25个元素,从第26个元素开始。可以通过添加 ?limit= parameter.

curl 'localhost:8080/film?start=25&limit=5'

这也从第26个元素开始,但是只返回5个元素而不是25个元素。

总结


在本文中,您已经了解了如何使用Speedment、Spring和generate-spring插件轻松地建立和运行完整的REST API。


请关注公众号:程序你好
0

精彩评论

暂无评论...
验证码 换一张
取 消