企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## @Call 用于存储过程调用,如下存储过程 ```sql CREATE DEFINER=`root`@`%` PROCEDURE `test`.`mytest`(IN s_count INT,OUT s_count2 varchar(10)) BEGIN SELECT * from User; SET s_count2='abc'; END ``` 可以使用mapper,表示如下 ```java @Call("call test.mytest(?,?)") List<User> callSample(int id, @CallOutBean OutHolder outHolder); ``` 对于输入参数,可以使用@CallParam() 表示,如下代码是等价的 ```java @Call("call test.mytest(?,?)") @Select List<User> callSample(@CallParam(1) int id, @CallOutBean OutHolder outHolder); ``` CallParam包含了一个比选参数,存储过程输入参数索引,从1开始 如果存储过程有出参,则使用 @CallOutBean 指示的任意POJO对象封装,如上例子的OutHolder封装了返回结果,定义如下 ```java @Data public class OutHolder { @CallParam(2) String name; } ``` 因此对Mapper调用方法类似如下 ```java OrderLogMapper orderLogMapper = sqlManager.getMapper(OrderLogMapper.class); OutHolder outHolder = new OutHolder(); List<User> list = orderLogMapper.callSample(1,outHolder); System.out.println(outHolder.getName()); System.out.println(list); ``` > Call注解定义如下,申明使用CallBuilder 实现此Mapper方法,调用SQLManager.executeCall. 如果对其有兴趣,可以参考定 > ```JAVA >@Target({java.lang.annotation.ElementType.METHOD}) > @Retention(RetentionPolicy.RUNTIME) > @Builder(CallBuilder.class) > public @interface Call { > String value() default ""; > } > ```