java流写入数据库
快速流媒体
当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
java流写入数据库