mybatis-plus是很好用的,让我们写一些增删改查的时候特别快速便捷,但是要想玩点花活基本没人用mybatis-plus,那mybatis-plus怎么玩点花活(接收存储过程的返回值)呢?
觉得有帮助记得帮我点个赞啊😄
先扫一眼这个sql存储过程
--用户组织查询,显示列:【级距/姓名/手机号/直接上级】
ALTER proc [dbo].[sp_Rpt_Branch]
@OperID int,
@UserID int,
@Msg varchar(200) OUTPUT
as
begin
if @UserID != @OperID
begin
set @Msg = '报错,查询人员错误!'
-- RETURN @Msg
END
else
begin
select 1 as ilevel,a.phonenumber as cphone,a.nick_name as cname,a.f_balance as fbalance,b.phonenumber as clevelphone,b.nick_name cleadername
from v_sys_user a join v_sys_user b on a.id_leader = b.user_id
where b.user_id = @UserID
order by b.phonenumber,a.phonenumber
END
begin
set @Msg = '查询人员成功!'
-- RETURN @Msg
end
end
查询结果为
我的目标是接收到这个返回值结果1(2)
下面是代码部分:
Domain
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 测试存储过程接收对象
*
* @author zihao
* @date 2022-08-22
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SysCunChuUser implements Serializable {
//流标识符,序列化ID,保持不同版本的兼容性,在程序版本升级时避免程序报出版本不一致的错误。
private static final long serialVersionUID = 1L;
//用了lombok所以只要定义参数就行了
private String ilevel;
private String cphone;
private String cname;
private String fbalance;
private String clevelphone;
private String cleadername;
private String field1;
}
Controller
// 以下测试存储过程,仅作保留
Map<String, Object> params = new HashMap<>();
params.put("operid",1);
params.put("userid",1);
params.put("field1","");
List<SysCunChuUser> cunchu = userService.getCunchu(params);
System.out.println(params.get("field1")+"======");
Service
//测试存储过程,用于验证返回值是否可以接收到
List<SysCunChuUser> getCunchu(Map<String, Object> params);
ServiceImpl
//测试存储过程,用于验证返回值是否可以接收到
@Override
public List<SysCunChuUser> getCunchu(Map<String, Object> params){
return userMapper.getCunchu(params);
};
Mapper
//测试存储过程,用于验证返回值是否可以接收到
@Select("declare @a varchar(2000) " +
"EXEC sp_Rpt_Branch " +
"#{operid,mode=IN,jdbcType=INTEGER},#{userid,mode=IN,jdbcType=INTEGER},#{field1,mode=OUT,jdbcType=VARCHAR} " +
"select @a ")
@Options(statementType = StatementType.CALLABLE)
List<SysCunChuUser> getCunchu(Map<String, Object> params);
此存储过程需要3个参数,返回一个表加上一个返回值,那我们将operid,userid这两个传参和field1接收参都封装进HashMap,指定泛型为SysCunChuUser,得到的结果为: