高级示例
本节提供 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);
}