What is Speedment?

Speedment is a Java 8 Stream ORM Toolkit and Runtime

With Speedment you can write database applications using Java only. No SQL coding is needed.

One-liner

Search for a long Film (of length greater than 120 minutes):

// Searches are optimized in the background!
Optional<Film> longFilm = films.stream()
    .filter(Film.LENGTH.greaterThan(120))
    .findAny();

Results in the following SQL query:

SELECT 
    `film_id`,`title`,`description`,`release_year`,
    `language_id`,`original_language_id`,`rental_duration`,`rental_rate`,
    `length`,`replacement_cost`,`rating`,`special_features`,
    `last_update` 
FROM 
     `sakila`.`film
WHERE
    (`length` > 120)

No need for manually writing SQL-queies any more. Remain in a pure Java world!

Expressing SQL as Java 8 Streams

When we started the open-source project Speedment, the main objective was to remove the polyglot requirement for Java database application developers. After all, we all love Java and why should we need to know SQL when, instead, we could derive the same semantics directly from Java streams? When one takes a closer look at this objective, it turns out that there is a remarkable resemblance between Java streams and SQL as summarized in this simplified table:

SQL Java 8 Stream Equivalent
FROM stream()
SELECT map()
WHERE filter() (before collecting)
HAVING filter() (after collecting)
JOIN flatMap()
DISTINCT distinct()
UNION concat(s0, s1).distinct()
ORDER BY sorted()
OFFSET skip()
LIMIT limit()
GROUP BY collect(groupingBy())
COUNT count()

Speedment allows all these Stream operations to be used. Read more on Stream to SQL Equivalences here.

Features

View Database Tables as Standard Java Streams

  • Pure Java - Stream API instead of SQL eliminates the need of a query language
  • Dynamic Joins - Ability to perform joins as Java streams on the application side
  • Parallel Streams - Workload can automatically be divided over several threads

Short and Concise Type Safe Code

  • Code Generation - Automatic Java representation of the latest state of your database eliminates boilerplate code and the need of manually writing Java Entity classes while minimizing the risk for bugs.
  • Null Protection - Minimizes the risk involved with database null values by wrapping to Java Optionals
  • Enum Integration - Mapping of String columns to Java Enums increases memory efficiency and type safety

Lazy Evaluation for Increased Performance

  • Streams are Lazy - Content from the database is pulled as elements are needed and consumed
  • Pipeline Introspection - Optimized performance by short circuiting of stream operations

Speedment Resources

Initializer

An on-line Initializer that can create pom.xml and application templates are available here

JavaDoc

The latest online JavaDocs are available here

Release Notes

Please refer to the Release Notes documents for new features, enhancements and fixes performed for each Speedment release.

Fast Facts About Speedment

Here are some fast facts about Speedment:

Supported Java Versions

Speedment supports Java 8 and upwards. Earlier Java versions are not supported because they do not support Streams. Under Java 9, the new Stream:takeWhile and Stream:dropWhile Stream operations will be automatically available under Speedment too.

Speedment Editions

This Reference Manual covers all editions of Speedment:

  • Speedment referes to the open-source edition of the product that can connect to open-source databases. It is also the name of the company (Speedment, Inc.) that provides the Speedment products.
  • Speedment Enterprise, is a commercially licensed product providing connectivity to commercial databases like Oracle, SQL Server, DB2, AS400 etc. Speedment Enterprise also contains in-JVM-memory acceleration and other enterprise features.

Speedment Plugins

We can extend Speedment’s functionality by using one or several plugins in the form of TypeMappers, Components and/or InjectBundles. These plugins have their own lifecycles. It is possible for anyone to write a Speedment plugin.

Licensing

Speedment open-source is licensed under the Apache 2 license. Speedment Enterprise is licensed under a commercial license.

Customer Support

Open-source support for Speedment is provided on a best effort basis via GitHub, Gitter and StackOverflow

Commercial support can be purchased for both Speedment and Speedment Enterprise. Read more on speedment.com

Contributing to Speedment

Speedment is open-source and so we are happy to accept pull requests and improvement suggestions from the community. Read more here on how to contribute to Speedment.

Phone Home

Speedment sends certain data back to our servers as described here