Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

NL2SQL Java Service

一个独立的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           # 配置文件

快速开始

1. 构建项目

cd nl2sql-java
mvn clean package

2. 配置文件

编辑 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_password

3. 启动服务

mvn spring-boot:run

服务将在 http://localhost:8080 启动

API接口

1. 同步查询

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"
}

2. 流式查询

POST /api/nl2sql/chat
Content-Type: application/json

# 请求体同上

流式响应会返回思考过程和最终结果。

3. 健康检查

GET /api/nl2sql/health

依赖说明

  • Spring Boot 3.2.2
  • Apache Calcite: SQL解析
  • OkHttp: HTTP客户端
  • FastJSON: JSON处理
  • MySQL Connector: 数据库连接
  • H2 Database: 测试数据库

使用示例

1. 准备Python NL2SQL服务

首先启动Python NL2SQL服务(见 ../nl2sql-python 目录)

2. 配置数据库

确保MySQL数据库中有相应的表和数据

3. 调用API

// 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
);

注意事项

  1. 需要先启动Python NL2SQL服务
  2. 确保数据库连接配置正确
  3. 表结构需要与schemaInfo中的定义匹配
  4. 支持MySQL方言,其他数据库需要调整配置