speedment是一个开源持久层框架,类似Hibernate等持久层框架,能够实现以纯Java 8函数式流方式访问数据库,而Hibernate等ORM是以对象方式访问数据库。
Speedment支持MySQL, PostgreSQL 和 MariaDB等
假设MySQL有以下user表:
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;
<p class="indent">
|
查询
查询邮件地址带有".com"的所有用户:
users.stream()
.filter(EMAIL.endsWith(".com"))
.forEach(System.out::println);
<p class="indent">
|
查询第一个名字是 “Adam” 或 “Cecilia” 的用户,并以用户名排序,取出排名前10个,获得邮件地址并打印出来:
users.stream()
.filter(FIRST_NAME.in("Adam", "Cecilia"))
.sorted(USERNAME.comparator())
.limit(10)
.map(User::getEmail)
.forEach(System.out::println);
<p class="indent">
|
新增
创建一个用户并持久化到数据库:
users.newEmptyEntity()
.setUsername("thorshammer")
.setEmail("mastergamer@castle.com")
.setPassword("uE8%3KwB0!")
.persist();
<p class="indent">
|
更新
查询到id = 10的用户并更新密码
users.stream()
.filter(ID.equal(10))
.map(u -> u.setPassword("pA6nLaX1Z"))
.forEach(User::update);
<p class="indent">
|
删除
删除 id = 100的用户
users.stream()
.filter(ID.equal(100))
.forEach(User::remove);
<p class="indent">
|
并行查询
能并行实现一些非常费事的操作,比如查询 id在10_000和20_000之间的用户:
users.stream()
.parallel()
.filter(ID.between(10_000, 20_000))
.forEach(expensiveOperation());
<p class="indent">
|
设置
上面展示了数据库的CRUD,那么如何设置Speedment以开始CRUD操作呢?非常简单:
final Speedment speedment = new JavapotApplication()
.withPassword("javapot") // 数据库密码
.build();
final Manager<User> users = speedment.managerOf(User.class);
<p class="indent">
|
项目地址:
GitHub - speedment/speedment: Wrap your database i