{"id":23193112,"url":"https://github.com/enaium/jimmer-gradle","last_synced_at":"2025-08-18T20:33:23.544Z","repository":{"id":224082088,"uuid":"762181289","full_name":"Enaium/jimmer-gradle","owner":"Enaium","description":"A gradle plugin for jimmer","archived":false,"fork":false,"pushed_at":"2024-04-12T09:57:28.000Z","size":135,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-04-12T16:58:16.180Z","etag":null,"topics":["codegen","database","generator","gradle","jimmer","orm"],"latest_commit_sha":null,"homepage":"https://plugins.gradle.org/plugin/cn.enaium.jimmer.gradle","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Enaium.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,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-23T08:48:14.000Z","updated_at":"2024-05-17T17:40:42.911Z","dependencies_parsed_at":"2024-02-23T17:30:02.499Z","dependency_job_id":"74869b36-6603-4dc1-9e1e-6c15a735f4f7","html_url":"https://github.com/Enaium/jimmer-gradle","commit_stats":null,"previous_names":["enaium/jimmer-gradle"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Enaium%2Fjimmer-gradle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Enaium%2Fjimmer-gradle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Enaium%2Fjimmer-gradle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Enaium%2Fjimmer-gradle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Enaium","download_url":"https://codeload.github.com/Enaium/jimmer-gradle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230276320,"owners_count":18201089,"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":["codegen","database","generator","gradle","jimmer","orm"],"created_at":"2024-12-18T13:10:06.454Z","updated_at":"2025-08-18T20:33:23.532Z","avatar_url":"https://github.com/Enaium.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jimmer-gradle\n\n![GitHub top language](https://img.shields.io/github/languages/top/enaium/jimmer-gradle?style=flat-square\u0026logo=kotlin)\n![Gradle Plugin Portal Version](https://img.shields.io/gradle-plugin-portal/v/cn.enaium.jimmer.gradle?style=flat-square\u0026logo=gradle)\n\nA Gradle plugin for [Jimmer](https://github.com/babyfish-ct/jimmer) that generates code from your database or DDL,\nsupports incremental compilation, and simplifies dependency management for both Java and Kotlin projects.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Quick Start](#quick-start)\n    - [Method 1: Gradle Project Plugin](#method-1-gradle-project-plugin)\n    - [Method 2: Gradle Settings Plugin (Recommended)](#method-2-gradle-settings-plugin-recommended)\n- [Jimmer Version Configuration](#jimmer-version-configuration)\n- [Entity Generation](#entity-generation)\n    - [From Database](#from-database)\n    - [From DDL](#from-ddl)\n    - [Association Handling](#association-handling)\n    - [Type Mappings](#type-mappings)\n- [Incremental DTO Compilation](#incremental-dto-compilation)\n- [Dependency Management](#dependency-management)\n- [Annotation Processor / KSP Arguments](#annotation-processor--ksp-arguments)\n- [Patch Support](#patch-support)\n- [Extension Reference](#extension-reference)\n\n---\n\n## Features\n\n- Generate code for tables, columns, and associations from a database or DDL.\n- Incremental compilation for DTOs (APT/KSP).\n- Automatic dependency management (Spring Boot, SQL, SQL-Kotlin).\n- Easy configuration for annotationProcessor/KSP arguments.\n- Use Jimmer's catalog in your project.\n- Auto-generate code on first project open.\n\n---\n\n## Quick Start\n\n\u003e **Note:** Do not use Method 1 and Method 2 at the same time.\n\n### Method 1: Gradle Project Plugin\n\nAdd to your `build.gradle.kts`:\n\n```kotlin\nplugins {\n    id(\"cn.enaium.jimmer.gradle\") version \"latest.release\"\n}\n```\n\nIf using Kotlin, declare the KSP plugin before the Jimmer plugin:\n\n```kotlin\nplugins {\n    kotlin(\"jvm\") version \"2.0.21\"\n    id(\"com.google.devtools.ksp\") version \"2.0.21+\"\n    id(\"cn.enaium.jimmer.gradle\") version \"latest.release\"// Must declare after the ksp plugin\n}\n```\n\nEnable auto dependency implementation:\n\n```kotlin\njimmer {\n    autoImplDepend = true\n}\n\ndependencies {\n    ksp(\"org.babyfish.jimmer:jimmer-ksp:x.x.x\")// Not auto\n}\n```\n\n---\n\n### Method 2: Gradle Settings Plugin (Recommended)\n\nAdd to your `settings.gradle.kts`:\n\n```kotlin\nplugins {\n    id(\"cn.enaium.jimmer.gradle.setting\") version \"latest.release\"\n}\n```\n\nTo modify the extension, use the project plugin as well:\n\n```kotlin\nplugins {\n    alias(jimmers.plugins.jimmer)\n}\n```\n\nIf using Kotlin, declare the KSP plugin before the Jimmer plugin:\n\n```kotlin\nplugins {\n    kotlin(\"jvm\") version \"2.0.21\"\n    alias(jimmers.plugins.ksp) version \"2.0.21+\"\n    alias(jimmers.plugins.jimmer)// Must declare after the ksp plugin\n}\n```\n\nAdd the KSP dependency in `build.gradle.kts`:\n\n```kotlin\ndependencies {\n    ksp(jimmers.ksp)\n}\n```\n\n---\n\n## Jimmer Version Configuration\n\nSet the Jimmer version in your `build.gradle.kts` (for project plugin) or `settings.gradle.kts` (for settings plugin):\n\n```kotlin\njimmer {\n    version.set(\"latest.release\") // default is latest\n}\n```\n\n---\n\n## Entity Generation\n\n### From Database\n\n```kotlin\nimport cn.enaium.jimmer.gradle.extension.Association\nimport cn.enaium.jimmer.gradle.extension.Driver\n\nplugins {\n    // ...\n    id(\"cn.enaium.jimmer.gradle\") version \"\u003cversion\u003e\"\n}\n\ndependencies {\n    // ...\n    runtimeOnly(\"org.postgresql:postgresql:42.6.0\") // JDBC driver required\n}\n\njimmer {\n    generator {\n        target {\n            srcDir.set(\"src/main/kotlin\")\n            packageName.set(\"cn.enaium\")\n        }\n        jdbc {\n            driver.set(Driver.POSTGRESQL) // POSTGRESQL, MARIADB, MYSQL\n            url.set(\"jdbc:postgresql://localhost:5432/postgres\")\n            username.set(\"postgres\")\n            password.set(\"postgres\")\n            // Optional: catalog, schemaPattern, tableNamePattern\n        }\n        table {\n            idView.set(true)\n            comment.set(true)\n            primaryKey.set(\"id\") // default is \"id\"\n            association.set(Association.REAL) // REAL, FAKE, NO\n            typeMappings.set(mapOf(\"float8\" to \"kotlin.Float\"))\n        }\n    }\n}\n```\n\n### From DDL\n\n```kotlin\njimmer {\n    generator {\n        target {\n            srcDir.set(\"src/main/kotlin\")\n            packageName.set(\"cn.enaium\")\n        }\n        jdbc {\n            ddl.set(file(\"src/main/resources/schema.sql\"))\n        }\n    }\n}\n```\n\n### Association Handling\n\n- Use the `_id` suffix for fake foreign keys (e.g., `user_id`).\n- Set `association.set(Association.FAKE)` for fake associations, `Association.REAL` for real, or `Association.NO` to\n  disable.\n- **Warning:** Do not mix fake and real associations in the same database.\n\n### Type Mappings\n\nDefault mappings are in [`mapping.kt`](src/main/kotlin/cn/enaium/jimmer/gradle/utility/mapping.kt). You can override\nthem:\n\n```kotlin\njimmer {\n    generator {\n        table {\n            typeMappings.set(mapOf(\"float8\" to \"kotlin.Float\")) // Java: \"java.lang.Float\"\n        }\n    }\n}\n```\n\n---\n\n## Incremental DTO Compilation\n\nOpen a DTO file and press `Ctrl + F9` to compile it incrementally.\n\n---\n\n## Dependency Management\n\n### Spring Boot Starter\n\n```kotlin\nplugins {\n    id(\"org.springframework.boot\") // required\n}\n\ndependencies {\n    implementation(jimmers.springBootStart)\n}\n```\n\n### SQL-Kotlin\n\n```kotlin\ndependencies {\n    implementation(jimmers.sqlKotlin)\n}\n```\n\n### SQL\n\n```kotlin\ndependencies {\n    implementation(jimmers.sql)\n}\n```\n\n---\n\n## Annotation Processor / KSP Arguments\n\n### KSP\n\n```kotlin\nplugins {\n    kotlin(\"jvm\") version \"2.0.21\"\n    id(\"com.google.devtools.ksp\") version \"2.0.21+\" // must be before jimmer plugin\n}\n\ndependencies {\n    ksp(jimmers.ksp)\n}\n```\n\n### Annotation Processor\n\n```kotlin\ndependencies {\n    annotationProcessor(jimmers.apt)\n}\n```\n\n### Arguments (Project Plugin Only)\n\n```kotlin\njimmer {\n    entry {\n        objects.set(\"Drafts\") // equals -Ajimmer.entry.objects=Drafts\n    }\n}\n```\n\n---\n\n## Patch Support\n\n```kotlin\njimmer {\n    patch {\n        enable = true\n    }\n}\n\ndependencies {\n    patch(jimmers.sqlKotlin) {\n        exclude(module = \"kotlin-stdlib\")\n        exclude(module = \"annotations\")\n        exclude(module = \"validation-api\")\n    }\n    patchKsp(jimmers.ksp)\n}\n```\n\n---\n\n## Extension Reference\n\n### Gradle Project Plugin Extension\n\n| Extension                           | Type                  | Default          | Description                     |\n|-------------------------------------|-----------------------|------------------|---------------------------------|\n| `version`                           | `String`              | `latest.release` | Jimmer version                  |\n| `keepIsPrefix`                      | `Boolean`             | `false`          | Keep 'is' prefix in getter      |\n| `autoImplDepend`                    | `Boolean`             | `false`          | Auto-add jimmer-sql-kotlin/sql  |\n| `generator`                         | `Generator`           |                  | Entity generator                |\n| `generator.target`                  | `Target`              |                  | Generation target               |\n| `generator.target.srcDir`           | `String`              |                  | Target src dir                  |\n| `generator.target.packageName`      | `String`              |                  | Target package                  |\n| `generator.jdbc`                    | `Jdbc`                |                  | DB connection                   |\n| `generator.jdbc.driver`             | `Driver`              |                  | DB driver                       |\n| `generator.jdbc.url`                | `String`              |                  | DB URL                          |\n| `generator.jdbc.username`           | `String`              |                  | DB username                     |\n| `generator.jdbc.password`           | `String`              |                  | DB password                     |\n| `generator.jdbc.ddl`                | `File`                |                  | DDL file                        |\n| `generator.jdbc.catalog`            | `String`              |                  | DB catalog                      |\n| `generator.jdbc.schemaPattern`      | `String`              |                  | DB schema pattern               |\n| `generator.jdbc.tableNamePattern`   | `String`              |                  | DB table name pattern           |\n| `generator.table`                   | `Table`               |                  | Table rule                      |\n| `generator.table.name`              | `Boolean`             | `false`          | Add table annotation            |\n| `generator.table.column`            | `Boolean`             | `false`          | Add column annotation           |\n| `generator.table.primaryKey`        | `String`              | `id`             | Table PK name                   |\n| `generator.table.association`       | `Association`         | `REAL`           | Association rule                |\n| `generator.table.typeMappings`      | `Map\u003cString, String\u003e` |                  | Column type mapping             |\n| `generator.table.comment`           | `Boolean`             | `false`          | Generate table comment          |\n| `generator.table.idView`            | `Boolean`             | `false`          | Generate id view annotation     |\n| `generator.table.joinTable`         | `Boolean`             | `false`          | Generate join table annotation  |\n| `generator.table.idGeneratorType`   | `String`              |                  | Generator type annotation       |\n| `generator.poet`                    | `Poet`                |                  | Poet rule                       |\n| `generator.poet.indent`             | `String`              | Four spaces      | Poet indent                     |\n| `client.checkedExceptions`          | `Boolean`             |                  |                                 |\n| `client.ignoreJdkWarning`           | `Boolean`             |                  | Java only                       |\n| `dto.dirs`                          | `List\u003cString\u003e`        |                  |                                 |\n| `dto.testDirs`                      | `List\u003cString\u003e`        |                  |                                 |\n| `dto.mutable`                       | `Boolean`             |                  | Kotlin only                     |\n| `dto.defaultNullableInputModifier`  | `InputDtoModifier`    |                  |                                 |\n| `dto.hibernateValidatorEnhancement` | `Boolean`             |                  | Java only                       |\n| `entry`                             | `Entry`               |                  | Java only                       |\n| `entry.objects`                     | `String`              |                  | `objects` class name            |\n| `entry.tables`                      | `String`              |                  | `tables` class name             |\n| `entry.tableExes`                   | `String`              |                  | `tableExes` class name          |\n| `entry.fetchers`                    | `String`              |                  | `fetchers` class name           |\n| `immutable.isModuleRequired`        | `Boolean`             |                  | Kotlin only                     |\n| `source.includes`                   | `List\u003cString\u003e`        |                  | Java only                       |\n| `source.excludes`                   | `List\u003cString\u003e`        |                  | Java only                       |\n| `patch.enable`                      | `Boolean`             | `false`          | Patch for Android compatibility |\n\n### Gradle Settings Plugin Extension\n\n| Extension | Type     | Default          | Description    |\n|-----------|----------|------------------|----------------|\n| `version` | `String` | `latest.release` | Jimmer version |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenaium%2Fjimmer-gradle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenaium%2Fjimmer-gradle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenaium%2Fjimmer-gradle/lists"}