Core Java

Java 8: Use Smart Streams with Your Database in 2 Minutes

Streaming with Speedment

When Java 8 finally arrived, some colleges and I started an open-source project to take the whole Java/DB issue one step further by leveraging on Java 8’s stream library, so that database tables could be viewed as pure Java 8 streams. Speedment was born! Wow, now we can do type-safe database applications without having to write SQL-code any more.Back in the ancient 90s, we Java developers had to struggle with making our database application work properly. There was a lot of coding, debugging and tweaking. Still, the applications often blew up right in our faces to our ever increasing agony. Things gradually improved over time with better language, JDBC and framework support. I’d like to think that we developers also improved, but there are different opinions on that…

Duke and Spire Mapping Streams.
Duke and Spire Mapping Streams.

Speedment connects to existing databases and generate Java code. We can then use the generated code to conveniently query the database using standard Java 8 streams. With the new version 2.3 hitting the shelves just recently, we can even do parallel query streams!

Let’s take some examples assuming we have the following database table defined:

  `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`)

Speedment is free for the open-source databases MySQL, PostgreSQL and MariaDB. There is also support for commercial databases, like Oracle, as an enterprise add-on feature.



Select all users with a “.com” mail address and print them:

Select users where the first name is either “Adam” or “Cecilia” and sort them in username order, then take the first 10 of those and extract the email address and print it.
            .filter("Adam", "Cecilia"))

Creating Database Content

Create a new user and persist it in the database:


Updating Database Content

Find the user with id = 10 and update the password:
            .map(u -> u.setPassword("pA6#nLaX1Z"))

Removing Database Content

Remove the user with id = 100:

New Cool Stuff: Parallel Queries

Do some kind of expensive operation
in parallel for users with 10_000 <= id < 20_000
            .filter(ID.between(10_000, 20_000))


Setup code for the examples above:

final Speedment speedment = new JavapotApplication()
            .withPassword("javapot") // Replace with your real DB password

        final Manager<User> users = speedment.managerOf(User.class);

Get Started with Speedment

Read more here on GitHub on how to get started with Speedment.

Per Minborg

I am a guy living in Palo Alto, California, but I am originally from Sweden. I am working as CTO on Speedment with Java and database application acceleration. Check it out on
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments
Back to top button