快速流媒体
当Java 8最终问世时,我和一些大学开始了一个开源项目,以利用Java 8的流库使整个Java / DB问题进一步向前发展,以便将数据库表视为纯Java 8流。 速度诞生了! 哇,现在我们可以做类型安全的数据库应用程序了,而不必再编写SQL代码了。在上世纪90年代,我们的Java开发人员不得不努力使数据库应用程序正常工作。 有很多编码,调试和调整。 尽管如此,应用程序还是经常面对我们不断增加的痛苦而爆炸。 随着时间的推移,随着更好的语言,JDBC和框架支持,情况逐渐得到改善。 我想我们的开发人员也有所改进,但是对此有不同的看法……
杜克和尖塔映射流。
Speedment连接到现有数据库并生成Java代码。 然后,我们可以使用生成的代码使用标准Java 8流方便地查询数据库。 随着新版本2.3的问世,我们甚至可以进行并行查询流!
让我们举一些例子,假设我们定义了以下数据库表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(45) NOT NULL,
`firstName` varchar(45) DEFAULT NULL,
`lastName` varchar(45) DEFAULT NULL,
`email` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_UNIQUE` (`email`),
UNIQUE KEY `username_UNIQUE` (`username`)
) ENGINE=InnoDB;
开源数据库MySQL,PostgreSQL和MariaDB免费提供Speedment。 还支持商业数据库(如Oracle)作为企业附加功能。
例子
查询方式
选择所有带有“ .com”邮件地址的用户并打印:
users.stream()
.filter(EMAIL.endsWith(".com"))
.forEach(System.out::println);
选择名字为“ Adam”或“ Cecilia”的用户,并按用户名顺序对其进行排序,然后选择其中的前10位并提取电子邮件地址并进行打印。
users.stream()
.filter(FIRST_NAME.in("Adam", "Cecilia"))
.sorted(USERNAME.comparator())
.limit(10)
.map(User::getEmail)
.forEach(System.out::println);
创建数据库内容
创建一个新用户并将其持久保存在数据库中:
users.newEmptyEntity()
.setUsername("thorshammer")
.setEmail("mastergamer@castle.com")
.setPassword("uE8%3KwB0!")
.persist();
更新数据库内容
查找id = 10的用户并更新密码:
users.stream()
.filter(ID.equal(10))
.map(u -> u.setPassword("pA6#nLaX1Z"))
.forEach(User::update);
删除数据库内容
删除ID = 100的用户:
users.stream()
.filter(ID.equal(100))
.forEach(User::remove);
新酷玩法:并行查询
做某种昂贵的手术
对于10_000 <= id <20_000的用户并行
users.stream()
.parallel()
.filter(ID.between(10_000, 20_000))
.forEach(expensiveOperation());
设定
上面示例的安装代码:
final Speedment speedment = new JavapotApplication()
.withPassword("javapot") // Replace with your real DB password
.build();
final Manager<User> users = speedment.managerOf(User.class);
加速入门
在GitHub上了解有关如何开始使用Speedment的更多信息。
翻译自: https://www.javacodegeeks.com/2016/04/java-8-use-smart-streams-database-2-minutes.html