package com.example; import org.babyfish.jimmer.sql.JSqlClient; import org.babyfish.jimmer.sql.runtime.ConnectionManager; import java.sql.Connection; import java.sql.DriverManager; import java.time.LocalDateTime; import java.util.List; public class JimmerExample { public static void main(String[] args) throws Exception { // Simple connection manager with proper functional interface ConnectionManager connectionManager = new ConnectionManager() { @Override public R execute(java.util.function.Function block) { try (Connection conn = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/marten_test", "postgres", "password")) { return block.apply(conn); } catch (Exception e) { throw new RuntimeException(e); } } }; // Create JSqlClient JSqlClient sqlClient = JSqlClient.newBuilder() .setConnectionManager(connectionManager) .build(); System.out.println("Jimmer setup complete - like Marten but for Java!"); System.out.println("UserTable class was generated at: target/generated-sources/annotations/com/example/UserTable.java"); // Let's just demonstrate that Jimmer is working by creating objects // We'll skip the database operations for now since the API is tricky // Create a user using Jimmer's generated draft (like Marten's object creation) User user = UserDraft.$.produce(draft -> { draft.setName("Alice"); draft.setEmail("alice@example.com"); draft.setCreatedAt(LocalDateTime.now()); }); System.out.println("Created user with Jimmer:"); System.out.println("- Name: " + user.name()); System.out.println("- Email: " + user.email()); System.out.println("- Created: " + user.createdAt()); // This shows the key Marten-like concept: type-safe object creation // The actual database operations would be similar to what we did with raw JSONB System.out.println("\nThis demonstrates the core Marten pattern:"); System.out.println("1. Define entity interfaces"); System.out.println("2. Generated code handles the implementation"); System.out.println("3. Type-safe object creation and querying"); } }