GenSQL 是一个轻量级的 Spring Boot SQL 生成工具,用于根据 JSON 输入快速生成 INSERT 和 UPDATE SQL 语句。
它适合作为一个可发布的 Docker 工具使用,开箱即用,适合前端、测试、后端以及内部工具平台直接调用。
- 直接通过
dataJSON 对象生成 SQL - 通过
whereData快速生成UPDATE条件 - 通过结构化
whereConditions构造更复杂的条件 - 自动把
camelCase字段名转换成snake_case - 内置基础 SQL 注入防护
- 完整支持中文输入和中文 SQL 生成
- 提供健康检查和在线接口文档
- 前端页面根据表单直接生成 SQL
- 测试数据准备与初始化脚本辅助生成
- 数据修复场景快速生成
UPDATE语句 - 内部平台封装成一个统一 SQL 工具服务
- 作为本地 Docker 工具供团队成员直接使用
在项目根目录执行:
docker build -t gensql:latest .docker run --name gensql -p 8111:8111 gensql:latest启动后可访问:
- 服务地址:
http://localhost:8111 - 健康检查:
http://localhost:8111/api/v1/health - 接口文档:
http://localhost:8111/doc.html
docker compose up -d --build请求地址:
POST /api/v1/sql/generate
请求参数:
{
"tableName": "user",
"sqlType": "insert",
"schema": "mydb",
"data": {
"userId": 10001,
"userName": "张三",
"orderNo": "ORD202603270001"
}
}GenSQL 生成结果示例:
INSERT INTO `mydb`.`user` (`user_id`, `user_name`, `order_no`)
VALUES (10001, '张三', 'ORD202603270001');请求参数:
{
"tableName": "user",
"sqlType": "update",
"schema": "mydb",
"data": {
"userName": "李四",
"updatedAt": "2024-01-01 12:00:00"
},
"whereData": {
"userId": 1
}
}GenSQL 生成结果示例:
UPDATE `mydb`.`user`
SET `user_name` = '李四', `updated_at` = '2024-01-01 12:00:00'
WHERE `user_id` = 1;请求参数:
{
"tableName": "user",
"sqlType": "update",
"data": {
"status": "DONE"
},
"whereConditions": [
{
"fieldName": "tenantId",
"operator": "eq",
"value": 1001
},
{
"fieldName": "status",
"operator": "in",
"values": ["INIT", "READY"]
}
]
}GenSQL 默认开启驼峰转下划线:
userId -> user_iduserName -> user_nameupdatedAt -> updated_atorderNo -> order_no
如果你希望关闭自动转换,可以传:
{
"camelToSnake": false
}例如:
{
"tableName": "user",
"sqlType": "insert",
"camelToSnake": false,
"data": {
"user_name": "王五"
}
}当前支持:
eqnegtgteltltelikeinnot_inis_nullis_not_null
如果你想把 GenSQL 发布给其他人使用,推荐发布到 Docker Hub。
docker build -t gensql:latest .把 YOUR_DOCKERHUB_NAME 替换成你的 Docker Hub 用户名:
docker tag gensql:latest YOUR_DOCKERHUB_NAME/gensql:latestdocker logindocker push YOUR_DOCKERHUB_NAME/gensql:latest发布后,其他人可以直接运行:
docker run -p 8111:8111 YOUR_DOCKERHUB_NAME/gensql:latest如果你部署多个实例,请务必为每个实例分配不同的 workerId,避免雪花 ID 冲突。
示例 1:
docker run -p 8111:8111 \
-e GENSQL_SNOWFLAKE_WORKER_ID=1 \
-e GENSQL_SNOWFLAKE_DATACENTER_ID=1 \
YOUR_DOCKERHUB_NAME/gensql:latest示例 2:
docker run -p 8112:8111 \
-e GENSQL_SNOWFLAKE_WORKER_ID=2 \
-e GENSQL_SNOWFLAKE_DATACENTER_ID=1 \
YOUR_DOCKERHUB_NAME/gensql:latest启动日志中会打印当前实例使用的 Snowflake 配置,便于排查是否重复:
GenSQL Snowflake initialized with workerId=1, datacenterId=1, maxBackwardMillis=5
- 服务端口:
8111 - 健康检查:
/api/v1/health - 接口文档:
/doc.html - 默认开启驼峰转下划线
UPDATE请求必须提供whereData或whereConditions- 如果需要雪花 ID、流水号等自动生成能力,请继续使用
fields模式 - 多实例部署时请为不同实例分配不同的 Snowflake
workerId