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;
|
查询
查询邮件地址带有".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("pA6nLaX1Z")) .forEach(User::update);
|
删除
删除 id = 100的用户
users.stream() .filter(ID.equal(100)) .forEach(User::remove);
|
并行查询
能并行实现一些非常费事的操作,比如查询 id在10_000和20_000之间的用户:
users.stream() .parallel() .filter(ID.between(10_000, 20_000)) .forEach(expensiveOperation());
|
设置
上面展示了数据库的CRUD,那么如何设置Speedment以开始CRUD操作呢?非常简单:
final Speedment speedment = new JavapotApplication() .withPassword("javapot") // 数据库密码 .build();
final Manager<User> users = speedment.managerOf(User.class);
|
项目地址:
GitHub - speedment/speedment: Wrap your database i