Giter Club home page Giter Club logo

eclipse-ee4j-nosql's Introduction

Jakarta NoSQL

Jakarta NoSQL is a Java framework that streamlines the integration of Java applications with NoSQL databases.

Jakarta NoSQL logo

One Mapping API to multiples NoSQL databases

Jakarta NoSQL has one API for each NoSQL database type. However, it uses the same annotations to map Java objects. Therefore, with just these annotations that look like JPA, there is support for more than twenty NoSQL databases.

@Entity
public class Car {

    @Id
    private Long id;
    @Column
    private String name;
    @Column
    private CarType type;
 //...
}

The Mapper annotations are pretty familiar if you are a JPA developer:

  • Entity

  • Id

  • Column

  • Embeddable

  • Convert

  • DiscriminatorColumn

  • DiscriminatorValue

  • Inheritance

  • MappedSuperclass

Important
Although similar to JPA, Jakarta NoSQL defines persistable fields with either ID or Column annotation.

After mapping an entity, you can explore the advantage of a Template, which is a helper to increase productivity on NoSQL operations.

@Inject
Template template;
...

Car ferrari = Car.id(1L).name("Ferrari").type(CarType.SPORT);
template.insert(ferrari);

Optional<Car> car = template.find(Car.class, 1L);
template.delete(Car.class, 1L);

This template has specialization to take the benefits of a particular NoSQL database type.

There is Repository exploring the DDD pattern to have a higher abstraction.

public interface CarRepository extends Repository<Car, String> {

    Optional<Car> findByName(String name);

}

@Inject
CarRepository repository;
...

Car ferrari = Car.id(1L).name("Ferrari").type(CarType.SPORT);
repository.save(ferrari);
Optional<Car> idResult = repository.findById(1L);
Optional<Car> nameResult = repository.findByName("Ferrari");

Key-value

Jakarta NoSQL has a key-value template to explore the specific behavior of this NoSQL type.

@Inject
KeyValueTemplate template;
...

Car ferrari = Car.id(1L).name("ferrari").city("Rome").type(CarType.SPORT);

template.put(ferrari);
Optional<Car> car = template.get(1L, Car.class);
template.delete(1L);

It is a key-value agnostic database; thus, you can change the database without or less code impact possible.

Column

Jakarta NoSQL has a column template to explore the specific behavior of this NoSQL type.

@Inject
ColumnTemplate template;
...

Car ferrari = Car.id(1L).name("ferrari").city("Rome").type(CarType.SPORT);

template.insert(ferrari);
Optional<Car> car = template.find(Car.class, 1L);

ColumnDeleteQuery deleteQuery = delete().from("Car")
                    .where("_id").eq(1L).build();
template.delete(deleteQuery);


ColumnDeleteQuery query = select().from("Car")
                    .where("_id").eq(1L).build();

Optional<Car> result = template.singleResult("select * from Car where _id = 1");

It is a wide-column agnostic database; thus, you can change the database without or less code impact possible.

Document

Jakarta NoSQL has a document template to explore the specific behavior of this NoSQL type.

@Inject
DocumentTemplate template;
...

Car ferrari = Car.id(1L).name("ferrari").city("Rome").type(CarType.SPORT);

template.insert(ferrari);
Optional<Car> car = template.find(Car.class, 1L);

DocumentDeleteQuery deleteQuery = delete().from("Car")
                    .where("_id").eq(1L).build();
template.delete(deleteQuery);


DocumentDeleteQuery query = select().from("Car")
                    .where("_id").eq(1L).build();

Optional<Car> result = template.singleResult("select * from Car where _id = 1");

It is a document agnostic database; thus, you can change the database without or less code impact possible.

More information

Check the reference documentation, and Javadocs to know more.

Code of Conduct

This project is governed by the Eclipse Foundation of Conduct. By participating, you are expected to uphold this code of conduct. Please report unacceptable behavior to [email protected].

Getting Help

Having trouble with Jakarta NoSQL? We’d love to help!

Report bugs with Jakarta NoSQL at https://github.com/eclipse-ee4j/nosql.

Building from Source

You don’t need to build from source to use the project, but if you want to try, you can make it using Maven and Java 11 or higher.

mvn clean install

TCK

Any Jakarta NoSQL module must pass this test suite. The TCK uses JUnit Jupiter 5. Check it more to know more

Spec

Any Jakarta NoSQL module must pass this test suite. The TCK uses JUnit Jupiter 5. Check it more to know more

eclipse-ee4j-nosql's People

Contributors

otaviojava avatar mpredli01 avatar keilw avatar dmitrigit avatar jesse-gallagher avatar robsonkades avatar roanbrasil avatar dansilva41 avatar leomrlima avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.