前言:你可以利用一个图形工具连接到数据库并生成出一套完整的 ORM 框架代码来表示域模型。但是 Speedment 不单单只是一个代码生成器而已,它还是一个能插入应用程序中的运行时程序,这样就有可能将你的 Java 8 流式代码翻译成优化过的SQL查询。这也是我将会在本文中专门讲述的一个部分。
接触一个新工具的时候,刚开始要克服的最大障碍就是如何让你自己先尝试做出一个小东西来。现在你也许对 Java 8 中新的 Stream API 的运作方式在理解上比较自信,但你也许并没用它来进行过数据库查询操作。为了帮助你开始使用 Stream API 来对 SQL 数据库进行创建、修改和读取操作, 我已经在这个快速开始的教程中把它们整合到了一起。希望它能帮助你提升对流式API的使用水平!
背景
Speedment 是一个开放源代码的工具集,它可以被用来生成 Java 实体,并且能将我们同数据库的通信过程管理起来。你可以利用一个图形工具连接到数据库并生成出一套完整的 ORM 框架代码来表示域模型。但是 Speedment 不单单只是一个代码生成器而已,它还是一个能插入应用程序中的运行时程序,这样就有可能将你的 Java 8 流式代码翻译成优化过的SQL查询。这也是我将会在本文中专门讲述的一个部分。
生成代码
要在一个 Maven 工程中开始使用 Speedment,需要你将下面几行代码添加到你的 pom.xml 文件中。在本例中,我使用的是 MySQL,而你也可以选择使用 PostgreSQL 或者 MariaDB。面向于像Oracle这样的专有数据库可用于企业级客户。
Pom.xml
<properties>
<speedment.version>3.0.1</speedment.version>
<db.groupId>mysql</db.groupId>
<db.artifactId>mysql-connector-java</db.artifactId>
<db.version>5.1.39</db.version> </properties>
<dependencies> <dependency> <groupId>com.speedment</groupId>
<artifactId>runtime</artifactId>
<version>${speedment.version}</version>
<type>pom</type> </dependency>
<dependency> <groupId>${db.groupId}</groupId>
<artifactId>${db.artifactId}</artifactId>
<version>${db.version}</version> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>com.speedment</groupId>
<artifactId>speedment-maven-plugin</artifactId>
<version>${speedment.version}</version>
<dependencies> <dependency> <groupId>${db.groupId}</groupId>
<artifactId>${db.artifactId}</artifactId>
<version>${db.version}</version> </dependency>
</dependencies> </plugin> </plugins> </build>
现在你可以访问到许多新的 Maven 资源库,它们能让你更加轻松的使用这个工具包。要启动 Speedment UI, 执行如下命令:
mvn speedment:tool
这样就会有一个过程引导你连接到数据库并对代码生成进行配置。一开始最简单的方法就是用默认的设置先跑起来再说。当你按下生成按钮“Generate,” Speedment 就会对你的数据库元数据进行分析,然后在你的工程中添加像实体和实体管理器这样的类。
初始化 Speedment
当你的域模型生成好了以后,Speedment 的设置就容易了。创建一个新的 Main.java 文件然后添加如下几行代码。你看到的类都是生成的,因此它们的命名都是根据数据库模式、表以及列的名称来决定的。
Main.java
public class Main
{ public static void main(String... param)
{ final HaresApplication app = new HaresApplicationBuilder()
.withPassword("password") .build();
}
}
上面的代码创建了一个新的应用程序实体,它使用了一种生成的构造器模式。构造器是的对任何运行时配置细节的设置成为可能,例如数据库的密码。
当我们有了一个应用实体,就可以用它来访问生成的实体管理器了。在这里,我的数据库中有了四个表; “hare”, “carrot”, “human”, 以及 “friend”. (你可以在这里找到完整的数据库定义)。
final CarrotManager carrots = app.getOrThrow(CarrotManager.class);
final HareManager hares = app.getOrThrow(HareManager.class);
final HumanManager humans = app.getOrThrow(HumanManager.class);
final FriendManager hares = app.getOrThrow(FriendManager.class);
现在这些实体管理器可以被用来执行所有的CRUD操作了。
更新实体
更新存在的实体和读取以及持久化实体非常相似。在我们调用update()方法之前,对实体本地拷贝的改变,不会影响数据库内容。
下面,我们拿到之前使用Hare创建的Harry,并将他的颜色变为棕色:
harry.setColor("brown"); final Hare updatedHarry = hares.update(harry);
如果更新被接受了,那么管理器会返回hare的一个新的拷贝,因为我们在后面会继续使用这个实例。就想做“创建”的例子中,更新可能会失败。也许颜色被定义为“值唯一”,棕色已经存在于hare中。那样的话,会抛出一个SpeedmentException异常.
我们也可以通过合并多个实体到一个流中来同时更新他们。加入我们想将所有名字为Harry的hare变为棕色,我们可以这样做:
hares.stream()
.filter(Hare.NAME.equal("Harry"))
.map(Hare.COLOR.setTo("Brown"))
.forEach(hares.updater()); // 更新流中存在的元素
我们还应该使用try-catch语句来确保在运行过程中有失败发生时警告用户。
try
{ hares.stream() .filter(Hare.NAME.equal("Harry"))
.map(Hare.COLOR.setTo("Brown"))
.forEach(hares.updater());
}
catch (final SpeedmentException ex)
{
System.err.println(ex.getMessage()); return;
}
实体删除
我们需要知道的最后一个 CRUD 操作就是从数据库中删除实体。这个操作几乎和“更新”操作时等同的。假如说我们要把年龄超过10岁的兔子的记录都删除,就要这样做:
Try
{ hares.stream() .filter(Hare.AGE.greaterThan(10)) .forEach(hares.remover());
// Removes remaining hares }
catch (final SpeedmentException ex)
{ System.err.println(ex.getMessage()); return;
}
总结
通过阅读本文你已经了解了如何在一个 Maven 工程中对 Speedment 进行设置,还有如何使用 Java 8 的 Stream API 来从数据库中创建、更新、读取以及删除实体。这是你可以利用 Speedment 所能进行的操作的一个小的子集, 但已经是一个能让你上手的好的开始了。更多的示例以及更加高级的使用场景可以在GitHub-page上找到。
文章出自:http://qh.itpxw.cn/peixun/software/201636630.html
文章标题:Java 8 Streams中的数据库CRUD操作
免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员
用户级别:10
机构名称:IT培训网
联 系 人:罗老师
联系电话:13783581536
联系手机:13783581536
在线客服:
在 线 QQ:
电子邮件:
网站域名:http://www.itpxw.cn
注册时间:2016-07-18 11:07
最后登录:2024-02-20 13:02
Java定义方法的格式是什么?IT培训网小编来告诉大家。所谓方法...
大家在Java教程中会学到关于Java消息推送的知识,那么,Java消息...
常用的Java日期格式转换有哪些?IT培训网小编来告诉大家。 1...
Java创建对象数组的方法是什么?IT培训网小编来告诉大家。Ja...