{"id":20776450,"url":"https://github.com/nikialeksey/jood","last_synced_at":"2026-03-02T11:34:46.138Z","repository":{"id":54512579,"uuid":"192158975","full_name":"nikialeksey/jood","owner":"nikialeksey","description":"Object oriented jdbc wrapper","archived":false,"fork":false,"pushed_at":"2022-08-30T11:09:38.000Z","size":132,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-11-17T13:08:24.692Z","etag":null,"topics":["database","elegant-objects","elegantobjects","eo-principles","java","java-8","java-library","java8","jdbc","library","migrations","object-oriented","sql","sql-database","sql-migrations","sql-queries"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikialeksey.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-16T06:42:01.000Z","updated_at":"2023-10-05T11:52:36.000Z","dependencies_parsed_at":"2022-08-13T18:20:16.471Z","dependency_job_id":null,"html_url":"https://github.com/nikialeksey/jood","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikialeksey%2Fjood","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikialeksey%2Fjood/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikialeksey%2Fjood/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikialeksey%2Fjood/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikialeksey","download_url":"https://codeload.github.com/nikialeksey/jood/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234482080,"owners_count":18840232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","elegant-objects","elegantobjects","eo-principles","java","java-8","java-library","java8","jdbc","library","migrations","object-oriented","sql","sql-database","sql-migrations","sql-queries"],"created_at":"2024-11-17T13:08:42.340Z","updated_at":"2025-09-28T03:32:36.690Z","avatar_url":"https://github.com/nikialeksey.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jood\n\n![Elegant Objects Respected Here](http://www.elegantobjects.org/badge.svg)\n\n![nullfree status](https://youshallnotpass.dev/nullfree/nikialeksey/jood)\n![staticfree status](https://youshallnotpass.dev/staticfree/nikialeksey/jood)\n![allpublic status](https://youshallnotpass.dev/allpublic/nikialeksey/jood)\n![setterfree status](https://youshallnotpass.dev/setterfree/nikialeksey/jood)\n![nomultiplereturn status](https://youshallnotpass.dev/nomultiplereturn/nikialeksey/jood)\n\n[![Lib version](https://img.shields.io/maven-central/v/com.nikialeksey/jood.svg?label=maven)](https://maven-badges.herokuapp.com/maven-central/com.nikialeksey/jood)\n[![Build Status](https://travis-ci.org/nikialeksey/jood.svg?branch=master)](https://travis-ci.org/nikialeksey/jood)\n[![codecov](https://codecov.io/gh/nikialeksey/jood/branch/master/graph/badge.svg)](https://codecov.io/gh/nikialeksey/jood)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/nikialeksey/jood/blob/master/LICENSE)\n\n![logo](https://raw.githubusercontent.com/nikialeksey/jood/master/assets/github-logo.png)\n\n## What is it?\n**Jood** is object oriented sql-database library written in Java.\n\n## Getting started\n\n#### Gradle\n```groovy\nimplementation 'com.nikialeksey:jood:x.y.z'\n```\n\n#### Maven\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.nikialeksey\u003c/groupId\u003e\n  \u003cartifactId\u003ejood\u003c/artifactId\u003e\n  \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nWhere `x.y.z` actual version from\n[![Lib version](https://img.shields.io/maven-central/v/com.nikialeksey/jood.svg?label=maven)](https://maven-badges.herokuapp.com/maven-central/com.nikialeksey/jood)\n\n### Connection\n```java\nConnection connection = DriverManager.getConnection(...);\nDb db = new JdDb(() -\u003e connection);\n```\n\nFor example, connect to `sqlite` in-memory:\n```java\nConnection connection = DriverManager.getConnection(\n    \"jdbc:sqlite::memory:\"\n);\nDb db = new JdDb(() -\u003e connection);\n```\n\n### Data source\n```java\nDataSource ds = ...;\nDb db = new JdDb(ds);\n```\n\nFor example, connect to `h2` in-memory through the `c3p0` pooled data source:\n```java\nComboPooledDataSource ds = new ComboPooledDataSource();\nds.setJdbcUrl(\"jdbc:h2:mem:db_name\");\nDb db = new JdDb(ds);\n```\n\n### Simple queries\n```java\nDb db = ...;\ndb.write(new JdSql(\"CREATE TABLE a (n INTEGER NOT NULL)\"));\ndb.write(new JdSql(\"INSERT INTO a(n) VALUES(5)\"));\ntry (\n    QueryResult qr = db.read(new JdSql(\"SELECT * FROM a\"))\n) {\n    ResultSet rs = qr.rs();\n    while (rs.next()) {\n        String n = rs.getString(\"n\");\n    }\n}\n```\n\n### Query arguments\n```java\ndb.write(\n    new JdSql(\n        \"INSERT INTO a(n) VALUES(?)\",\n        new IntArg(5)\n    )\n);\n```\n\n### Transactions\n```java\nDb db = ...;\ndb.run(() -\u003e { // all changes inside will be commited after successfull execution\n    db.run(() -\u003e { // transactions could be inner\n        for (int i = 0; i \u003c 1000; i++) {\n            db.write(new JdSql(\"INSERT INTO a(n) VALUES(1)\"));\n        }\n    });\n    for (int i = 0; i \u003c 3000; i++) {\n        db.write(new JdSql(\"INSERT INTO a(n) VALUES(2)\"));\n    }\n});\n```\n\n### Migrations\n```java\nDb origin = ...;\nDb db = new MigrationsDb(\n    origin,\n    new JdMigrations(\n        new Migration() {\n            @Override\n            public int number() {\n                return 0; // migration index\n            }\n\n            @Override\n            public void execute(final Db db) throws JbException {\n                db.write(\n                    new JdSql(\n                        \"CREATE TABLE user (name TEXT NOT NULL)\"\n                    )\n                );\n            }\n        },\n        new Migration() {\n            @Override\n            public int number() {\n                return 1; // migration index\n            }\n\n            @Override\n            public void execute(final Db db) throws JbException {\n                db.write(\n                    new JdSql(\n                        \"ALTER TABLE user \" +\n                            \"ADD lastname TEXT NOT NULL DEFAULT ''\"\n                    )\n                );\n            }\n        }  \n    ),\n    2 // db version number\n)\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikialeksey%2Fjood","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikialeksey%2Fjood","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikialeksey%2Fjood/lists"}