一个独立的NL2SQL(自然语言转SQL)Java服务。
- 自然语言转SQL查询
- 支持同步和流式响应
- 支持MySQL数据库连接
- 完整的SQL解析和结果处理
- RESTful API接口
nl2sql-java/
├── src/main/java/com/nl2sql/
│ ├── Application.java # 启动类
│ ├── controller/ # 控制器
│ ├── service/ # 服务层
│ ├── config/ # 配置类
│ ├── data/ # 数据模型
│ │ ├── dto/ # 数据传输对象
│ │ ├── model/ # 数据模型
│ │ ├── sql/ # SQL解析工具
│ │ └── provider/jdbc/ # JDBC数据访问
│ └── util/ # 工具类
└── src/main/resources/
└── application.yml # 配置文件
cd nl2sql-java
mvn clean package编辑 src/main/resources/application.yml:
nl2sql:
agent-url: http://localhost:1601 # Python NL2SQL服务地址
db-config:
type: mysql
host: localhost
port: 3306
schema: your_database
username: your_username
password: your_passwordmvn spring-boot:run服务将在 http://localhost:8080 启动
POST /api/nl2sql/query
Content-Type: application/json
{
"requestId": "test-123",
"query": "查询不同国家的销售总额",
"modelCodeList": ["sales"],
"schemaInfo": [
{
"modelCode": "sales",
"modelName": "超市销售明细数据",
"type": "table",
"content": "sales_data",
"schemaList": [
{
"columnId": "COUNTRY",
"columnName": "国家",
"columnComment": "国家",
"dataType": "VARCHAR"
},
{
"columnId": "SALES",
"columnName": "销售额",
"columnComment": "销售额",
"dataType": "DECIMAL"
}
]
}
],
"currentDateInfo": "当前时间信息:2025-09-12,星期五",
"dbType": "mysql"
}POST /api/nl2sql/chat
Content-Type: application/json
# 请求体同上流式响应会返回思考过程和最终结果。
GET /api/nl2sql/health- Spring Boot 3.2.2
- Apache Calcite: SQL解析
- OkHttp: HTTP客户端
- FastJSON: JSON处理
- MySQL Connector: 数据库连接
- H2 Database: 测试数据库
首先启动Python NL2SQL服务(见 ../nl2sql-python 目录)
确保MySQL数据库中有相应的表和数据
// Java调用示例
RestTemplate restTemplate = new RestTemplate();
NL2SQLReq request = new NL2SQLReq();
request.setQuery("查询不同国家的销售总额");
request.setModelCodeList(Arrays.asList("sales"));
// 设置其他参数...
ResponseEntity<List> response = restTemplate.postForEntity(
"http://localhost:8080/api/nl2sql/query",
request,
List.class
);- 需要先启动Python NL2SQL服务
- 确保数据库连接配置正确
- 表结构需要与schemaInfo中的定义匹配
- 支持MySQL方言,其他数据库需要调整配置