Skip to content

MyBatis Plus 集成

本指南介绍如何在 MyBatis Plus 项目中集成 SuperSQL。

添加依赖

pom.xml 中添加 MyBatis Plus 集成依赖:

xml
<dependency>
    <groupId>com.aispace.supersql</groupId>
    <artifactId>super-sql-mybatis-plus</artifactId>
    <version>1.0.0-M1</version>
</dependency>

配置 MyBatis Plus

application.yml 中配置 MyBatis Plus:

yaml
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.your.package.entity
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

使用 ExecuteSqlMapper

SuperSQL 提供了 ExecuteSqlMapper 用于执行 SQL 查询。

Mapper 接口

java
@Mapper
public interface ExecuteSqlMapper extends BaseMapper<Map<String, Object>> {
    
}

使用示例

java
@Service
@RequiredArgsConstructor
public class QueryService {

    private final ExecuteSqlMapper executeSqlMapper;

    public List<Map<String, Object>> executeQuery(String sql) {
        return executeSqlMapper.selectList(
                new QueryWrapper<Map<String, Object>>()
                        .apply("SQL", sql)
        );
    }
}

集成 SuperSQL

Service 示例

java
@Service
@RequiredArgsConstructor
public class SuperSqlMyBatisService {

    private final SpringSqlEngine sqlEngine;
    private final ChatModel chatModel;
    private final ExecuteSqlMapper executeSqlMapper;

    public List<Map<String, Object>> query(String question) {
        String sql = sqlEngine.setChatModel(chatModel)
                .generateSql(question);
        
        return executeSqlMapper.selectList(
                new QueryWrapper<Map<String, Object>>()
                        .apply("SQL", sql)
        );
    }

    public void trainDatabase(String ddl) {
        sqlEngine.setChatModel(chatModel)
                .train(TrainBuilder.builder()
                        .content(ddl)
                        .policy(TrainPolicyType.DDL)
                        .build());
    }
}

Controller 示例

java
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class SuperSqlController {

    private final SuperSqlMyBatisService queryService;

    @PostMapping("/query")
    public ResponseEntity<?> query(@RequestBody QueryRequest request) {
        try {
            List<Map<String, Object>> result = queryService.query(request.getQuestion());
            return ResponseEntity.ok(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 {
            queryService.trainDatabase(request.getContent());
            return ResponseEntity.ok("训练成功");
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("训练失败: " + e.getMessage()));
        }
    }
}

下一步

最近更新

基于 Apache 2.0 许可证发布