使用speedment以Java 8 Stream訪問資料庫

banq發表於2016-04-26
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

相關文章