Skip to content

高级示例

本节提供 SuperSQL 的高级使用示例代码。

多表关联查询

JOIN 查询

java
@GetMapping("/user-orders")
public List<Map<String, Object>> getUserOrders(@RequestParam Long userId) {
    String question = "查询用户" + userId + "的所有订单信息,包括订单详情";
    String sql = sqlEngine.setChatModel(chatModel)
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

子查询

java
@GetMapping("/users-with-max-order")
public List<Map<String, Object>> getUsersWithMaxOrder() {
    String question = "查询每个用户及其最大金额的订单";
    String sql = sqlEngine.setChatModel(chatModel)
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

复杂条件查询

多条件查询

java
@GetMapping("/users-complex")
public List<Map<String, Object>> getUsersComplex(
        @RequestParam String name,
        @RequestParam Integer minAge,
        @RequestParam Integer maxAge) {
    
    String question = "查询名字包含" + name + ",年龄在" + 
                     minAge + "到" + maxAge + "之间的用户";
    String sql = sqlEngine.setChatModel(chatModel)
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

日期范围查询

java
@GetMapping("/orders-by-date-range")
public List<Map<String, Object>> getOrdersByDateRange(
        @RequestParam String startDate,
        @RequestParam String endDate) {
    
    String question = "查询从" + startDate + "到" + endDate + "期间的订单";
    String sql = sqlEngine.setChatModel(chatModel)
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

数据分析查询

趋势分析

java
@GetMapping("/sales-trend")
public List<Map<String, Object>> getSalesTrend(
        @RequestParam String period) {
    
    String question = "分析最近" + period + "的销售趋势";
    String sql = sqlEngine.setChatModel(chatModel)
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

统计分析

java
@GetMapping("/sales-statistics")
public Map<String, Object> getSalesStatistics() {
    String question = "计算销售总额、平均订单金额、订单数量等统计信息";
    String sql = sqlEngine.setChatModel(chatModel)
            .generateSql(question);
    
    List<Map<String, Object>> results = sqlEngine.executeSql(sql);
    return Map.of("statistics", results);
}

批量操作

批量查询

java
@PostMapping("/batch-query")
public Map<String, List<Map<String, Object>>> batchQuery(
        @RequestBody List<String> questions) {
    
    Map<String, List<Map<String, Object>>> results = new HashMap<>();
    
    for (String question : questions) {
        String sql = sqlEngine.setChatModel(chatModel)
                .generateSql(question);
        List<Map<String, Object>> result = sqlEngine.executeSql(sql);
        results.put(question, result);
    }
    
    return results;
}

批量训练

java
@PostMapping("/batch-train")
public ResponseEntity<String> batchTrain(@RequestBody List<TrainRequest> requests) {
    try {
        for (TrainRequest request : requests) {
            sqlEngine.setChatModel(chatModel)
                    .train(TrainBuilder.builder()
                            .content(request.getContent())
                            .question(request.getQuestion())
                            .policy(request.getPolicy())
                            .build());
        }
        return ResponseEntity.ok("批量训练成功");
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body("批量训练失败: " + e.getMessage());
    }
}

高级特性使用

使用 RAG 选项

java
@GetMapping("/query-with-rag-options")
public List<Map<String, Object>> queryWithRagOptions(
        @RequestParam String question) {
    
    String sql = sqlEngine.setChatModel(chatModel)
            .setOptions(RagOptions.builder()
                    .topN(10)              // 增加检索数量
                    .rerank(true)           // 启用重排序
                    .limitScore(0.3)        // 降低分数阈值
                    .build())
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

自定义 Prompt

java
@GetMapping("/query-with-custom-prompt")
public List<Map<String, Object>> queryWithCustomPrompt(
        @RequestParam String question) {
    
    String customPrompt = """
        你是一个 SQL 专家。根据以下数据库表结构,生成准确的 SQL 查询。
        
        表结构:
        {table_schema}
        
        用户问题:{question}
        
        要求:
        1. 只返回 SQL 查询语句
        2. 不要包含任何解释
        3. 使用表别名提高可读性
        """;
    
    String sql = sqlEngine.setChatModel(chatModel)
            .setPrompt(SqlpromptBuilder().builder()
                    .template(customPrompt)
                    .build())
            .generateSql(question);
    
    return sqlEngine.executeSql(sql);
}

下一步

最近更新

基于 Apache 2.0 许可证发布