前面我们介绍了使用java语言做一个MCP server,这里我们演示下使用springboot+mybatis集成一个mcp server,直接使用AI操作数据库。
整体的实现思路和之前的文章是一样的,这里我们使用前面的mcpdemo2来实现本文操作数据库的案例。
一、集成mybatis
这里首先需要做的就是集成mybatis服务,然后编写一个mapper文件即可,这里我们做3个案例,分别是:
1、查询某个库有多少张表 2、查询某个库下面所有的表 3、根据自定义条件来查询表数据
因此我们的mybatis的mapper类的代码示例如下:
@Select("select count(1) from information_schema.tables where table_schema = #{databaseName}") Integer getAllTableNos(@Param("databaseName") String databaseName); @Select("select table_name from information_schema.tables where table_schema = #{databaseName}") List<String> getAllTableInfosByDBName(@Param("databaseName") String databaseName); @Select("select * from ${dnName}.${tableName} where ${fieldName} ${operatorStr} #{value}") List<HashMap<String, Object>> queryTableDatas(@Param("dnName") String dnName, @Param("tableName") String tableName, @Param("fieldName") String fieldName, @Param("operatorStr") String operatorStr, @Param("value") String value);
二、编写service
这里每一个方法都需要编写一个toolservice来使用,对应3个方法,我们需要编写3个service
三、注册tools
最重要的一步,就是需要把编写的toolservice给注册上去
@Bean public ToolCallbackProvider dbTools(SqlService sqlService) { return MethodToolCallbackProvider.builder().toolObjects(sqlService).build(); }
四、进行测试
接下来我们就进行测试了,这里还是使用cherry studio来进行测试,启动项目,在cherry studio中添加mcp
然后我们与AI进行对话,添加这个MCPserver
这里一定要确保MCP服务器被勾选上,杰西莱开始对话:
案例一:查询test库有几张表
对话之后,可以看到他调用了mcp server的queryTableNosByDBName方法,返回了具体的数据
案例二:查询test库下面所有表的名称
对话之后可以看到他调用了mcp server的queryTableInfosByDBName方法,返回了所有表名称
案例三:查询test库accounts表中age大于10的数据
对话之后可以看到他调用了mcp server的queryTableDatas方法,返回了所有的数据
这里AI不止调用了数据库查询了满足条件的数据,并且还对数据进行了中文的整理,使用起来更加的方便。
备注:
1、目前市面上大部分的mcp server主要使用mython编写,使用java编写的都非常少,所以此系列主要是基于java来编写mcp server,让熟悉java的同学更快的熟悉AI。
2、本文的案例操作数据库的话直接使用mybatis就好,主要是把参数配置灵活一些,这样子可以更好的适配场景。
3、操作数据库的话,这里我们建议还是使用web或者springbootTest,把每个写好的toolservice进行测试好再发布,不然AI调用的时候出现报错异常会进行循环调用,造成资源浪费。
最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...