Spring Boot 集成
本指南介绍如何在 Spring Boot 项目中集成 SuperSQL。
添加依赖
在 pom.xml 中添加 SuperSQL Spring Boot Starter 依赖:
xml
<dependency>
<groupId>com.aispace.supersql</groupId>
<artifactId>super-sql-spring-boot-starter</artifactId>
<<version>1.0.0-M1</version>
</dependency>自动配置
SuperSQL Starter 提供了自动配置,会自动创建以下 Bean:
SpringSqlEngine: SQL 引擎SpringVectorStore: 向量存储SpringRagEngine: RAG 引擎RerankModel: 重排序模型(如果配置)
配置属性
在 application.yml 中配置 SuperSQL:
yaml
super-sql:
init-train: false
scope: ALONE
schemas:
- schema: your_schema
temperature: 0.0配置项说明
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
init-train | Boolean | false | 是否在启动时自动训练 |
scope | ScopeType | ALONE | 训练范围 |
schemas | List | [] | 指定训练的 schema |
temperature | Double | 0.0 | 生成 SQL 的温度参数 |
使用示例
Controller 示例
java
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class SuperSqlController {
private final SpringSqlEngine sqlEngine;
private final ChatModel chatModel;
@PostMapping("/query")
public ResponseEntity<?> query(@RequestBody QueryRequest request) {
try {
String sql = sqlEngine.setChatModel(chatModel)
.setOptions(RagOptions.builder()
.topN(request.getTopN())
.rerank(request.isRerank())
.limitScore(request.getLimitScore())
.build())
.generateSql(request.getQuestion());
List<Map<String, Object>> result = sqlEngine.executeSql(sql);
return ResponseEntity.ok(Map.of(
"sql", sql,
"result", result
));
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(Map.of("error", e.getMessage()));
}
}
@PostMapping("/train")
public ResponseEntity<String> train(@RequestBody TrainRequest request) {
try {
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());
}
}
}Service 示例
java
@Service
@RequiredArgsConstructor
public class QueryService {
private final SpringSqlEngine sqlEngine;
private final ChatModel chatModel;
public QueryResult query(String question) {
String sql = sqlEngine.setChatModel(chatModel)
.generateSql(question);
List<Map<String, Object>> result = sqlEngine.executeSql(sql);
return QueryResult.builder()
.sql(sql)
.result(result)
.build();
}
public void trainDatabase(String ddl) {
sqlEngine.setChatModel(chatModel)
.train(TrainBuilder.builder()
.content(ddl)
.policy(TrainPolicyType.DDL)
.build());
}
}自定义配置
禁用自动配置
如果需要自定义配置,可以禁用自动配置:
java
@SpringBootApplication(exclude = {
SuperSqlAutoConfiguration.class
})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}手动配置 Bean
java
@Configuration
public class CustomSqlEngineConfig {
@Bean
public SpringSqlEngine customSqlEngine(
IExecuteSqlService executeService,
ChatModel chatModel,
SpringVectorStore vectorStore,
SpringRagEngine ragEngine,
ResourceLoader resourceLoader,
RerankModel rerankModel) {
return new SpringSqlEngine(
executeService,
chatModel,
vectorStore,
ragEngine,
resourceLoader,
rerankModel
);
}
}条件配置
基于配置的条件
yaml
super-sql:
enabled: truejava
@Configuration
@ConditionalOnProperty(name = "super-sql.enabled", havingValue = "true")
public class SuperSqlConfiguration {
}基于 Bean 的条件
java
@Configuration
@ConditionalOnBean(ChatModel.class)
public class SuperSqlWithChatModelConfiguration {
}测试
单元测试
java
@SpringBootTest
@AutoConfigureMockMvc
class SuperSqlControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private SpringSqlEngine sqlEngine;
@Test
void testQuery() throws Exception {
QueryRequest request = new QueryRequest("查询所有用户", 5, true, 0.4);
when(sqlEngine.setChatModel(any()))
.thenReturn(sqlEngine);
when(sqlEngine.setOptions(any()))
.thenReturn(sqlEngine);
when(sqlEngine.generateSql(any()))
.thenReturn("SELECT * FROM user");
when(sqlEngine.executeSql(any()))
.thenReturn(List.of());
mockMvc.perform(post("/api/query")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)))
.andExpect(status().isOk());
}
}下一步
- 查看 MyBatis Plus 集成 了解 MyBatis Plus 集成
- 学习 MCP 集成 了解 MCP 集成
- 探索 向量数据库 了解向量数据库配置
