aigroup-workflow 2.2.1 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/.codex/config.toml +22 -39
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/java_zn/coding-style.md +169 -0
- package/docs/rules/java_zn/mybatis.md +102 -0
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +5 -5
- package/package.json +40 -39
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +196 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/mybatis-plus.md +592 -0
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/java/spring-boot-engineer_zn/SKILL.md +129 -0
- package/skills/java/spring-boot-engineer_zn/references/architecture.md +23 -0
- package/skills/java/spring-boot-engineer_zn/references/concurrency.md +9 -0
- package/skills/java/spring-boot-engineer_zn/references/exception-logging.md +31 -0
- package/skills/java/spring-boot-engineer_zn/references/persistence.md +13 -0
- package/skills/java/spring-boot-engineer_zn/references/pojo-lombok.md +48 -0
- package/skills/java/spring-boot-engineer_zn/references/security.md +9 -0
- package/skills/java/spring-boot-engineer_zn/references/testing.md +7 -0
- package/skills/java/spring-boot-engineer_zn/references/validation.md +80 -0
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -0,0 +1,592 @@
|
|
|
1
|
+
# Data Access - MyBatis-Plus
|
|
2
|
+
|
|
3
|
+
## Core Rule
|
|
4
|
+
|
|
5
|
+
Use MyBatis-Plus to remove repetitive single-table SQL, not to hide business rules.
|
|
6
|
+
|
|
7
|
+
| Scenario | Preferred Pattern |
|
|
8
|
+
|----------|-------------------|
|
|
9
|
+
| CRUD by id | `BaseMapper#selectById`, `insert`, `updateById`, `deleteById` |
|
|
10
|
+
| Simple single-table filters | `LambdaQueryWrapper` / `LambdaUpdateWrapper` |
|
|
11
|
+
| Simple paging | `BaseMapper#selectPage` with `Page<T>` |
|
|
12
|
+
| Count / exists | `selectCount` with a lambda wrapper |
|
|
13
|
+
| Complex joins | Mapper interface method + XML SQL |
|
|
14
|
+
| Aggregation / reports | XML SQL with dedicated result DTO |
|
|
15
|
+
| Dynamic SQL with many branches | XML SQL, not a huge Java wrapper chain |
|
|
16
|
+
| Vendor-specific SQL | XML SQL, isolated in the mapper layer |
|
|
17
|
+
|
|
18
|
+
Do not write XML for trivial `WHERE id = ?`, simple `LIKE`, simple status filters, or normal pagination. Do not force complex joins into wrapper chains. When a query needs `JOIN`, `GROUP BY`, window functions, `UNION`, CTE, or a hand-tuned execution plan, put it in XML.
|
|
19
|
+
|
|
20
|
+
## Package Layout
|
|
21
|
+
|
|
22
|
+
Keep MyBatis-Plus details inside the data/service boundary. Controllers should talk to services and DTOs, not mappers or persistence objects.
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
src/main/java/com/example/user/
|
|
26
|
+
controller/
|
|
27
|
+
UserController.java
|
|
28
|
+
dto/
|
|
29
|
+
UserCreateRequest.java
|
|
30
|
+
UserResponse.java
|
|
31
|
+
UserSearchCriteria.java
|
|
32
|
+
UserOrderSummary.java
|
|
33
|
+
entity/
|
|
34
|
+
UserDO.java
|
|
35
|
+
mapper/
|
|
36
|
+
UserMapper.java
|
|
37
|
+
service/
|
|
38
|
+
UserService.java
|
|
39
|
+
|
|
40
|
+
src/main/resources/
|
|
41
|
+
mapper/
|
|
42
|
+
UserMapper.xml
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If the project already uses `Entity`, `PO`, or another suffix, follow the project. In new MyBatis-Plus code, prefer `DO` for database objects so they do not look like API DTOs or domain responses.
|
|
46
|
+
|
|
47
|
+
## Dependency and Configuration
|
|
48
|
+
|
|
49
|
+
Use the project-managed MyBatis-Plus version. For MyBatis-Plus `3.5.9+`, add `mybatis-plus-jsqlparser` when using `PaginationInnerInterceptor`.
|
|
50
|
+
|
|
51
|
+
```xml
|
|
52
|
+
<dependency>
|
|
53
|
+
<groupId>com.baomidou</groupId>
|
|
54
|
+
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
|
55
|
+
</dependency>
|
|
56
|
+
|
|
57
|
+
<dependency>
|
|
58
|
+
<groupId>com.baomidou</groupId>
|
|
59
|
+
<artifactId>mybatis-plus-jsqlparser</artifactId>
|
|
60
|
+
</dependency>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
mybatis-plus:
|
|
65
|
+
mapper-locations: classpath*:mapper/**/*.xml
|
|
66
|
+
type-aliases-package: com.example.user.entity
|
|
67
|
+
configuration:
|
|
68
|
+
map-underscore-to-camel-case: true
|
|
69
|
+
global-config:
|
|
70
|
+
db-config:
|
|
71
|
+
id-type: auto
|
|
72
|
+
logic-delete-field: deleted
|
|
73
|
+
logic-delete-value: 1
|
|
74
|
+
logic-not-delete-value: 0
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Keep SQL logging in local/test profiles only. Do not enable verbose SQL logs with bind values in production when the query may contain PII.
|
|
78
|
+
|
|
79
|
+
## MyBatis-Plus Configuration
|
|
80
|
+
|
|
81
|
+
```java
|
|
82
|
+
@Configuration
|
|
83
|
+
@MapperScan("com.example.user.mapper")
|
|
84
|
+
public class MybatisPlusConfig {
|
|
85
|
+
|
|
86
|
+
@Bean
|
|
87
|
+
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
|
88
|
+
var interceptor = new MybatisPlusInterceptor();
|
|
89
|
+
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
|
|
90
|
+
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
|
|
91
|
+
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
|
|
92
|
+
return interceptor;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Adjust `DbType` to the actual database. Add tenant or dynamic-table interceptors only when the project really needs them.
|
|
98
|
+
|
|
99
|
+
## Entity Pattern
|
|
100
|
+
|
|
101
|
+
Entities are mutable persistence objects. Keep API validation and response shaping in DTOs, not in `DO` classes.
|
|
102
|
+
|
|
103
|
+
```java
|
|
104
|
+
@TableName("sys_user")
|
|
105
|
+
@Getter
|
|
106
|
+
@Setter
|
|
107
|
+
@NoArgsConstructor
|
|
108
|
+
public class UserDO {
|
|
109
|
+
|
|
110
|
+
@TableId(type = IdType.AUTO)
|
|
111
|
+
private Long id;
|
|
112
|
+
|
|
113
|
+
private Long tenantId;
|
|
114
|
+
|
|
115
|
+
private String email;
|
|
116
|
+
|
|
117
|
+
private String username;
|
|
118
|
+
|
|
119
|
+
private UserStatus status;
|
|
120
|
+
|
|
121
|
+
@TableField(fill = FieldFill.INSERT)
|
|
122
|
+
private LocalDateTime createdAt;
|
|
123
|
+
|
|
124
|
+
@TableField(fill = FieldFill.INSERT_UPDATE)
|
|
125
|
+
private LocalDateTime updatedAt;
|
|
126
|
+
|
|
127
|
+
@TableLogic
|
|
128
|
+
private Integer deleted;
|
|
129
|
+
|
|
130
|
+
@Version
|
|
131
|
+
private Integer version;
|
|
132
|
+
|
|
133
|
+
@TableField(exist = false)
|
|
134
|
+
private List<String> roleNames;
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Prefer `@Getter` / `@Setter` over `@Data` for persistence objects. `@Data` generates `equals`, `hashCode`, and `toString`, which can accidentally include large or sensitive fields.
|
|
139
|
+
|
|
140
|
+
## Auto Fill
|
|
141
|
+
|
|
142
|
+
Use MyBatis-Plus auto-fill for audit fields, but keep user-specific audit data explicit when it depends on security context.
|
|
143
|
+
|
|
144
|
+
```java
|
|
145
|
+
@Component
|
|
146
|
+
public class AuditMetaObjectHandler implements MetaObjectHandler {
|
|
147
|
+
|
|
148
|
+
@Override
|
|
149
|
+
public void insertFill(MetaObject metaObject) {
|
|
150
|
+
var now = LocalDateTime.now();
|
|
151
|
+
strictInsertFill(metaObject, "createdAt", LocalDateTime.class, now);
|
|
152
|
+
strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, now);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@Override
|
|
156
|
+
public void updateFill(MetaObject metaObject) {
|
|
157
|
+
strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Auto-fill runs when MyBatis-Plus receives an entity. If you call `update(Wrapper<T>)` without an entity, update fill will not run. Prefer `updateById(entity)` or `update(entity, wrapper)` when `updatedAt` must be maintained automatically.
|
|
163
|
+
|
|
164
|
+
## Mapper Pattern
|
|
165
|
+
|
|
166
|
+
Simple mappers extend `BaseMapper` and stay empty until a real custom query is needed.
|
|
167
|
+
|
|
168
|
+
```java
|
|
169
|
+
public interface UserMapper extends BaseMapper<UserDO> {
|
|
170
|
+
|
|
171
|
+
IPage<UserOrderSummary> selectOrderSummaries(
|
|
172
|
+
Page<UserOrderSummary> page,
|
|
173
|
+
@Param("criteria") UserOrderSearchCriteria criteria
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Use `@MapperScan` at configuration level. Add `@Mapper` only if the project does not use scanner configuration.
|
|
179
|
+
|
|
180
|
+
## BaseMapper and IService
|
|
181
|
+
|
|
182
|
+
Both `BaseMapper` and `IService` are MyBatis-Plus built-in capabilities. This guide defaults to explicit constructor injection of mapper interfaces because it matches the service-layer style used by this skill.
|
|
183
|
+
|
|
184
|
+
If an existing project already extends `ServiceImpl<UserMapper, UserDO>`, keep that convention. Use built-in methods such as `getById`, `list`, `page`, `save`, and `updateById` for simple operations, but do not let service classes become CRUD pass-through wrappers with no business meaning.
|
|
185
|
+
|
|
186
|
+
Avoid the static `Db` kit in normal service code. It makes dependencies implicit and is harder to test than constructor-injected mappers or services.
|
|
187
|
+
|
|
188
|
+
## Simple Queries
|
|
189
|
+
|
|
190
|
+
For simple reads, build lambda wrappers in the service layer. Use method references so refactors fail at compile time instead of becoming broken SQL column strings.
|
|
191
|
+
|
|
192
|
+
```java
|
|
193
|
+
@Service
|
|
194
|
+
@RequiredArgsConstructor
|
|
195
|
+
@Transactional(readOnly = true)
|
|
196
|
+
public class UserService {
|
|
197
|
+
|
|
198
|
+
private static final long MAX_PAGE_SIZE = 100;
|
|
199
|
+
|
|
200
|
+
private final UserMapper userMapper;
|
|
201
|
+
|
|
202
|
+
public Optional<UserResponse> findById(Long id) {
|
|
203
|
+
return Optional.ofNullable(userMapper.selectById(id))
|
|
204
|
+
.map(UserResponse::from);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
public IPage<UserResponse> search(UserSearchCriteria criteria) {
|
|
208
|
+
var page = Page.<UserDO>of(
|
|
209
|
+
criteria.pageNo(),
|
|
210
|
+
Math.min(criteria.pageSize(), MAX_PAGE_SIZE)
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
var query = Wrappers.lambdaQuery(UserDO.class)
|
|
214
|
+
.eq(UserDO::getTenantId, criteria.tenantId())
|
|
215
|
+
.eq(criteria.status() != null, UserDO::getStatus, criteria.status())
|
|
216
|
+
.like(StringUtils.hasText(criteria.keyword()), UserDO::getUsername, criteria.keyword())
|
|
217
|
+
.orderByDesc(UserDO::getCreatedAt);
|
|
218
|
+
|
|
219
|
+
return userMapper.selectPage(page, query)
|
|
220
|
+
.convert(UserResponse::from);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
public boolean existsByEmail(Long tenantId, String email) {
|
|
224
|
+
var query = Wrappers.lambdaQuery(UserDO.class)
|
|
225
|
+
.eq(UserDO::getTenantId, tenantId)
|
|
226
|
+
.eq(UserDO::getEmail, email);
|
|
227
|
+
|
|
228
|
+
return userMapper.selectCount(query) > 0;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Do not return unbounded `List<T>` from public APIs. Use pagination unless the result set is naturally tiny and bounded by business rules.
|
|
234
|
+
|
|
235
|
+
## Simple Writes
|
|
236
|
+
|
|
237
|
+
Keep transaction boundaries on services. Check affected rows for updates and deletes that must touch exactly one row.
|
|
238
|
+
|
|
239
|
+
```java
|
|
240
|
+
@Service
|
|
241
|
+
@RequiredArgsConstructor
|
|
242
|
+
public class UserCommandService {
|
|
243
|
+
|
|
244
|
+
private final UserMapper userMapper;
|
|
245
|
+
|
|
246
|
+
@Transactional
|
|
247
|
+
public UserResponse create(UserCreateRequest request) {
|
|
248
|
+
var user = new UserDO();
|
|
249
|
+
user.setTenantId(request.tenantId());
|
|
250
|
+
user.setEmail(request.email());
|
|
251
|
+
user.setUsername(request.username());
|
|
252
|
+
user.setStatus(UserStatus.ACTIVE);
|
|
253
|
+
|
|
254
|
+
userMapper.insert(user);
|
|
255
|
+
return UserResponse.from(user);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@Transactional
|
|
259
|
+
public void disable(Long tenantId, Long userId) {
|
|
260
|
+
var update = new UserDO();
|
|
261
|
+
update.setStatus(UserStatus.DISABLED);
|
|
262
|
+
|
|
263
|
+
var condition = Wrappers.lambdaUpdate(UserDO.class)
|
|
264
|
+
.eq(UserDO::getTenantId, tenantId)
|
|
265
|
+
.eq(UserDO::getId, userId)
|
|
266
|
+
.eq(UserDO::getStatus, UserStatus.ACTIVE);
|
|
267
|
+
|
|
268
|
+
int rows = userMapper.update(update, condition);
|
|
269
|
+
if (rows != 1) {
|
|
270
|
+
throw new UserNotFoundException(userId);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Avoid `update(null, wrapper)` when audit auto-fill or optimistic locking matters. Avoid `remove` / `delete` operations without a business condition.
|
|
277
|
+
|
|
278
|
+
## Complex XML Queries
|
|
279
|
+
|
|
280
|
+
Use XML when the query is a real SQL artifact. Keep the Java interface small and make parameters explicit with `@Param`.
|
|
281
|
+
|
|
282
|
+
```java
|
|
283
|
+
public record UserOrderSearchCriteria(
|
|
284
|
+
Long tenantId,
|
|
285
|
+
String keyword,
|
|
286
|
+
LocalDateTime startAt,
|
|
287
|
+
LocalDateTime endAt,
|
|
288
|
+
OrderStatus orderStatus,
|
|
289
|
+
long pageNo,
|
|
290
|
+
long pageSize
|
|
291
|
+
) {}
|
|
292
|
+
|
|
293
|
+
public record UserOrderSummary(
|
|
294
|
+
Long userId,
|
|
295
|
+
String username,
|
|
296
|
+
String email,
|
|
297
|
+
Long orderCount,
|
|
298
|
+
BigDecimal totalAmount,
|
|
299
|
+
LocalDateTime lastOrderAt
|
|
300
|
+
) {}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```xml
|
|
304
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
|
305
|
+
<!DOCTYPE mapper
|
|
306
|
+
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
307
|
+
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
308
|
+
|
|
309
|
+
<mapper namespace="com.example.user.mapper.UserMapper">
|
|
310
|
+
|
|
311
|
+
<resultMap id="UserOrderSummaryMap" type="com.example.user.dto.UserOrderSummary">
|
|
312
|
+
<constructor>
|
|
313
|
+
<arg column="user_id" javaType="java.lang.Long" />
|
|
314
|
+
<arg column="username" javaType="java.lang.String" />
|
|
315
|
+
<arg column="email" javaType="java.lang.String" />
|
|
316
|
+
<arg column="order_count" javaType="java.lang.Long" />
|
|
317
|
+
<arg column="total_amount" javaType="java.math.BigDecimal" />
|
|
318
|
+
<arg column="last_order_at" javaType="java.time.LocalDateTime" />
|
|
319
|
+
</constructor>
|
|
320
|
+
</resultMap>
|
|
321
|
+
|
|
322
|
+
<select id="selectOrderSummaries" resultMap="UserOrderSummaryMap">
|
|
323
|
+
SELECT
|
|
324
|
+
u.id AS user_id,
|
|
325
|
+
u.username,
|
|
326
|
+
u.email,
|
|
327
|
+
COUNT(o.id) AS order_count,
|
|
328
|
+
COALESCE(SUM(o.total_amount), 0) AS total_amount,
|
|
329
|
+
MAX(o.created_at) AS last_order_at
|
|
330
|
+
FROM sys_user u
|
|
331
|
+
INNER JOIN orders o
|
|
332
|
+
ON o.user_id = u.id
|
|
333
|
+
AND o.deleted = 0
|
|
334
|
+
WHERE u.deleted = 0
|
|
335
|
+
AND u.tenant_id = #{criteria.tenantId}
|
|
336
|
+
<if test="criteria.keyword != null and criteria.keyword != ''">
|
|
337
|
+
AND (
|
|
338
|
+
u.username LIKE CONCAT('%', #{criteria.keyword}, '%')
|
|
339
|
+
OR u.email LIKE CONCAT('%', #{criteria.keyword}, '%')
|
|
340
|
+
)
|
|
341
|
+
</if>
|
|
342
|
+
<if test="criteria.startAt != null">
|
|
343
|
+
AND o.created_at >= #{criteria.startAt}
|
|
344
|
+
</if>
|
|
345
|
+
<if test="criteria.endAt != null">
|
|
346
|
+
AND o.created_at < #{criteria.endAt}
|
|
347
|
+
</if>
|
|
348
|
+
<if test="criteria.orderStatus != null">
|
|
349
|
+
AND o.status = #{criteria.orderStatus}
|
|
350
|
+
</if>
|
|
351
|
+
GROUP BY u.id, u.username, u.email
|
|
352
|
+
ORDER BY last_order_at DESC
|
|
353
|
+
</select>
|
|
354
|
+
|
|
355
|
+
</mapper>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Let the pagination interceptor add paging SQL. Do not add manual `LIMIT` / `OFFSET` to a paged XML method unless the interceptor is intentionally not used.
|
|
359
|
+
|
|
360
|
+
## XML Pagination Usage
|
|
361
|
+
|
|
362
|
+
```java
|
|
363
|
+
@Transactional(readOnly = true)
|
|
364
|
+
public IPage<UserOrderSummary> searchOrderSummaries(UserOrderSearchCriteria criteria) {
|
|
365
|
+
var page = Page.<UserOrderSummary>of(
|
|
366
|
+
criteria.pageNo(),
|
|
367
|
+
Math.min(criteria.pageSize(), MAX_PAGE_SIZE)
|
|
368
|
+
);
|
|
369
|
+
|
|
370
|
+
return userMapper.selectOrderSummaries(page, criteria);
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
If a grouped XML page query has an expensive generated count SQL, define a dedicated count statement or split the count query from the data query.
|
|
375
|
+
|
|
376
|
+
## DTO Mapping
|
|
377
|
+
|
|
378
|
+
Use records for request/response DTOs when the project is on Java 16+.
|
|
379
|
+
|
|
380
|
+
```java
|
|
381
|
+
public record UserResponse(
|
|
382
|
+
Long id,
|
|
383
|
+
String email,
|
|
384
|
+
String username,
|
|
385
|
+
UserStatus status,
|
|
386
|
+
LocalDateTime createdAt
|
|
387
|
+
) {
|
|
388
|
+
public static UserResponse from(UserDO user) {
|
|
389
|
+
return new UserResponse(
|
|
390
|
+
user.getId(),
|
|
391
|
+
user.getEmail(),
|
|
392
|
+
user.getUsername(),
|
|
393
|
+
user.getStatus(),
|
|
394
|
+
user.getCreatedAt()
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
Do not expose `UserDO` from controllers. Persistence objects often contain internal fields such as `tenantId`, `deleted`, `version`, or audit metadata.
|
|
401
|
+
|
|
402
|
+
## SQL Safety
|
|
403
|
+
|
|
404
|
+
Use `#{}` for all runtime values.
|
|
405
|
+
|
|
406
|
+
```xml
|
|
407
|
+
WHERE u.email = #{email}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Avoid `${}`. It performs string substitution and can become SQL injection. The only acceptable cases are whitelisted identifiers such as sort columns or dynamic table names after strict validation.
|
|
411
|
+
|
|
412
|
+
```java
|
|
413
|
+
private static final Map<String, SFunction<UserDO, ?>> SORT_FIELDS = Map.of(
|
|
414
|
+
"createdAt", UserDO::getCreatedAt,
|
|
415
|
+
"username", UserDO::getUsername
|
|
416
|
+
);
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Avoid `wrapper.last(...)`, `apply(...)`, or raw SQL fragments with user input. If a fragment is unavoidable, keep user input bound with parameters and whitelist all identifiers.
|
|
420
|
+
|
|
421
|
+
## Transactions
|
|
422
|
+
|
|
423
|
+
Put `@Transactional` on service methods, not controllers or mappers.
|
|
424
|
+
|
|
425
|
+
| Operation | Transaction Pattern |
|
|
426
|
+
|-----------|---------------------|
|
|
427
|
+
| Read-only query | `@Transactional(readOnly = true)` |
|
|
428
|
+
| Single insert/update with side effects | `@Transactional` |
|
|
429
|
+
| Multi-step write | One service method with one transaction boundary |
|
|
430
|
+
| XML report query | `readOnly = true`, no state mutation |
|
|
431
|
+
|
|
432
|
+
Avoid self-invocation traps. A `@Transactional` method called from another method in the same class will not pass through Spring's proxy.
|
|
433
|
+
|
|
434
|
+
## Logical Delete and Optimistic Locking
|
|
435
|
+
|
|
436
|
+
Use `@TableLogic` for soft delete when records must be retained. Remember that XML SQL does not automatically add every business rule you forget to write. In XML, explicitly filter `deleted = 0`.
|
|
437
|
+
|
|
438
|
+
Use `@Version` for rows that can be concurrently edited. Check the update row count and return a conflict/domain exception when the row was not updated.
|
|
439
|
+
|
|
440
|
+
```java
|
|
441
|
+
@Transactional
|
|
442
|
+
public void rename(Long userId, String username, Integer version) {
|
|
443
|
+
var user = new UserDO();
|
|
444
|
+
user.setId(userId);
|
|
445
|
+
user.setUsername(username);
|
|
446
|
+
user.setVersion(version);
|
|
447
|
+
|
|
448
|
+
int rows = userMapper.updateById(user);
|
|
449
|
+
if (rows != 1) {
|
|
450
|
+
throw new ConcurrentUpdateException("User was modified: id=" + userId);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
## Performance Practices
|
|
456
|
+
|
|
457
|
+
- Select only needed columns for list pages. Avoid `SELECT *` in XML.
|
|
458
|
+
- Add indexes for equality filters, join keys, and common sort fields.
|
|
459
|
+
- Keep large report queries in XML so they can be reviewed with `EXPLAIN`.
|
|
460
|
+
- Prefer keyset pagination for very deep pages when the UI allows it.
|
|
461
|
+
- Do not use `like '%keyword%'` on large tables without understanding index impact.
|
|
462
|
+
- Keep batch writes chunked and transactional. Do not send a huge list in one statement by default.
|
|
463
|
+
- Avoid N+1 lookup loops. If a list view needs derived data from another table, write one XML query or fetch in batches.
|
|
464
|
+
- Keep result maps explicit for complex DTOs, enum columns, JSON columns, or fields with type handlers.
|
|
465
|
+
|
|
466
|
+
## Testing
|
|
467
|
+
|
|
468
|
+
Use mapper tests for XML SQL. Use a real database with Testcontainers when SQL depends on dialect behavior.
|
|
469
|
+
|
|
470
|
+
```java
|
|
471
|
+
@SpringBootTest
|
|
472
|
+
@Testcontainers
|
|
473
|
+
class UserMapperIT {
|
|
474
|
+
|
|
475
|
+
@Container
|
|
476
|
+
static MySQLContainer<?> mysql = new MySQLContainer<>("mysql:8.4");
|
|
477
|
+
|
|
478
|
+
@Autowired
|
|
479
|
+
private UserMapper userMapper;
|
|
480
|
+
|
|
481
|
+
@Test
|
|
482
|
+
void selectOrderSummaries_filtersByTenant() {
|
|
483
|
+
var criteria = new UserOrderSearchCriteria(
|
|
484
|
+
1L,
|
|
485
|
+
null,
|
|
486
|
+
null,
|
|
487
|
+
null,
|
|
488
|
+
null,
|
|
489
|
+
1,
|
|
490
|
+
20
|
|
491
|
+
);
|
|
492
|
+
|
|
493
|
+
var page = Page.<UserOrderSummary>of(1, 20);
|
|
494
|
+
var result = userMapper.selectOrderSummaries(page, criteria);
|
|
495
|
+
|
|
496
|
+
assertThat(result.getRecords())
|
|
497
|
+
.allSatisfy(row -> assertThat(row.userId()).isNotNull());
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
Test at least these cases:
|
|
503
|
+
|
|
504
|
+
- Simple wrapper query includes tenant / ownership filters.
|
|
505
|
+
- XML query works with all optional criteria absent.
|
|
506
|
+
- XML query works with each optional criterion present.
|
|
507
|
+
- Pagination returns stable ordering.
|
|
508
|
+
- Logical delete rows are hidden.
|
|
509
|
+
- Update operations check affected row count.
|
|
510
|
+
- Optimistic lock conflict is handled.
|
|
511
|
+
|
|
512
|
+
## Database Migrations
|
|
513
|
+
|
|
514
|
+
Keep table definitions aligned with entity annotations.
|
|
515
|
+
|
|
516
|
+
```sql
|
|
517
|
+
CREATE TABLE sys_user (
|
|
518
|
+
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|
519
|
+
tenant_id BIGINT NOT NULL,
|
|
520
|
+
email VARCHAR(100) NOT NULL,
|
|
521
|
+
username VARCHAR(100) NOT NULL,
|
|
522
|
+
status VARCHAR(32) NOT NULL,
|
|
523
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
524
|
+
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
525
|
+
deleted TINYINT NOT NULL DEFAULT 0,
|
|
526
|
+
version INT NOT NULL DEFAULT 0,
|
|
527
|
+
UNIQUE KEY uk_user_tenant_email (tenant_id, email),
|
|
528
|
+
KEY idx_user_tenant_status_created (tenant_id, status, created_at),
|
|
529
|
+
KEY idx_user_username (username)
|
|
530
|
+
);
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
Do not rely on MyBatis-Plus annotations as a replacement for Flyway/Liquibase migrations. The database schema is still the source of truth for production.
|
|
534
|
+
|
|
535
|
+
## Code Generator
|
|
536
|
+
|
|
537
|
+
Generated code is a starting point, not final code.
|
|
538
|
+
|
|
539
|
+
- Rename generated entities to match the project suffix (`DO`, `Entity`, or existing convention).
|
|
540
|
+
- Remove generated controllers unless they match the API design.
|
|
541
|
+
- Replace field injection with constructor injection.
|
|
542
|
+
- Replace broad `@Data` if the project prefers `@Getter` / `@Setter`.
|
|
543
|
+
- Move complex generated SQL into reviewed XML files.
|
|
544
|
+
- Add DTO mapping instead of returning persistence objects directly.
|
|
545
|
+
|
|
546
|
+
## MUST DO
|
|
547
|
+
|
|
548
|
+
| Rule | Correct Pattern |
|
|
549
|
+
|------|-----------------|
|
|
550
|
+
| Simple single-table query | `BaseMapper` + `LambdaQueryWrapper` |
|
|
551
|
+
| Complex join query | Mapper method + XML |
|
|
552
|
+
| Runtime values in SQL | `#{param}` |
|
|
553
|
+
| Dynamic identifiers | Whitelist before using `${}` |
|
|
554
|
+
| API response | Map `DO` to DTO/record |
|
|
555
|
+
| Pagination | `Page<T>` with max page size |
|
|
556
|
+
| Transactions | Service layer only |
|
|
557
|
+
| Audit fields | `FieldFill` + `MetaObjectHandler` |
|
|
558
|
+
| Safety plugin | `BlockAttackInnerInterceptor` |
|
|
559
|
+
| Custom XML | Mapper test with real DB dialect when needed |
|
|
560
|
+
|
|
561
|
+
## MUST NOT DO
|
|
562
|
+
|
|
563
|
+
- Do not write XML for simple CRUD that MP already supports.
|
|
564
|
+
- Do not force joins, reports, or aggregation queries into wrapper chains.
|
|
565
|
+
- Do not inject mappers into controllers.
|
|
566
|
+
- Do not return `DO` objects from REST APIs.
|
|
567
|
+
- Do not concatenate SQL with user input.
|
|
568
|
+
- Do not pass user input into `${}`, `last(...)`, or raw SQL fragments.
|
|
569
|
+
- Do not run unbounded list queries from API endpoints.
|
|
570
|
+
- Do not ignore affected row counts on important updates/deletes.
|
|
571
|
+
- Do not rely on auto-fill when calling `update(Wrapper<T>)` without an entity.
|
|
572
|
+
- Do not add global plugins or generator templates before the project needs them.
|
|
573
|
+
|
|
574
|
+
## Quick Reference
|
|
575
|
+
|
|
576
|
+
| API / Annotation | Purpose |
|
|
577
|
+
|------------------|---------|
|
|
578
|
+
| `BaseMapper<T>` | Built-in CRUD mapper |
|
|
579
|
+
| `Wrappers.lambdaQuery` | Type-safe query conditions |
|
|
580
|
+
| `Wrappers.lambdaUpdate` | Type-safe update conditions |
|
|
581
|
+
| `Page<T>` / `IPage<T>` | MyBatis-Plus pagination |
|
|
582
|
+
| `@TableName` | Table mapping |
|
|
583
|
+
| `@TableId` | Primary key mapping |
|
|
584
|
+
| `@TableField` | Field mapping, fill, type handler, non-table fields |
|
|
585
|
+
| `FieldFill` | Insert/update auto-fill strategy |
|
|
586
|
+
| `MetaObjectHandler` | Auto-fill implementation |
|
|
587
|
+
| `@TableLogic` | Logical delete field |
|
|
588
|
+
| `@Version` | Optimistic lock field |
|
|
589
|
+
| `MybatisPlusInterceptor` | Plugin container |
|
|
590
|
+
| `PaginationInnerInterceptor` | Pagination plugin |
|
|
591
|
+
| `OptimisticLockerInnerInterceptor` | Optimistic lock plugin |
|
|
592
|
+
| `BlockAttackInnerInterceptor` | Blocks full-table update/delete |
|