Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mineking9534/databaseutils

Reflection driven database library for Java
https://github.com/mineking9534/databaseutils

database java postgres reflection sql

Last synced: 1 day ago
JSON representation

Reflection driven database library for Java

Awesome Lists containing this project

README

        

![[Java CI]](https://github.com/MineKing9534/DatabaseUtils/actions/workflows/check.yml/badge.svg)
![[Latest Version]](https://maven.mineking.dev/api/badge/latest/releases/de/mineking/DatabaseUtils?prefix=v&name=Latest%20Version&color=0374b5)

> [!NOTE]
> If you use Kotlin it is highly recommended to use [KORMite](https://github.com/MineKing9534/KORMite) instead. It is a kotlin rewrite of this library with more features, more stability and a cleaner API interface.

# Installation

DatabaseUtils is hosted on a custom repository at [https://maven.mineking.dev](https://maven.mineking.dev/#/releases/de/mineking/DatabaseUtils). Replace VERSION with the lastest version (without the `v` prefix).
Alternatively, you can download the artifacts from jitpack (not recommended).

### Gradle

```groovy
repositories {
maven { url "https://maven.mineking.dev/releases" }
}

dependencies {
implementation "de.mineking:DatabaseUtils:VERSION"
}
```

### Maven

```xml


mineking
https://maven.mineking.dev/releases


de.mineking
DatabaseUtils
VERSION

```

## Usage
### Example 1

```java
public class User {
@Column(key = true)
public ID id; //You can use the JavaUtils ID class as column. It will automatically be generated. For custom types see TypeMapper and DatabaseManager#addMapper

@Column
public String name;

@Column
public String email;

public User() {}

public User(String name, String email) {
this.name = name;
this.email = email;
}
}

public class Main {
public static void main(String[] args) {
DatabaseManager manager = new DatabaseManager("localhost:5432/test", "user", "password");
Table table = manager.getTable(User.class, User::new, "users");

var user = new User("Rick Astley", "[email protected]");
table.insert(user);
System.out.println(user.id.asString()); //The id has been generated automatically
}
}
```

### Example 2

```java
public class Book implements DataClass {
@Column(autoincrement = true, key = true)
public int id;

@Column
public String title;

@Column
public String author;

private final Table table;

public Book(Table table) {}

public Book(Table table, String title, String author) {
this.title = title;
this.author = author;
this.table = table;
}

@Override
public String toString() {
return id + ": " + title + " by " + author;
}
}

public class Main {
public final DatabaseManager manager;
public final Table table;

public static void main(String[] args) {
new Main();
}

public Main() {
manager = new DatabaseManager("localhost:5432/test", "user", "password");
table = manager.getTable(Book.class, this::createInstance, "books");

System.out.println(new Book(table, "My Life", "Rick Astley").update());
System.out.println(table.selectAll(Order.ascendingBy("id").limit(5)));

table.selectMany(Where.greateOrEqual("id", 3)).forEach(Book::delete);
}

private Book createInstance() {
return new Book(table);
}
}
```

### Example 3

```java
public interface Bookshelf extends Table { //You can create custom tables
default List getByAuthor(String author) {
return selectMany(Where.equals("author", author));
}
}

public class Main {
public static void main(String[] args) {
DatabaseManager manager = new DatabaseManager("localhost:5432/test", "user", "password");
Bookshelf table = manager.getTable(Bookshelf.class, User.class, User::new, "books");

System.out.println(table.getByAuthor("Rick Astley"));
}
}
```