mybatis mysql注意,mybatis中使用mysql存储过程注意事项

1、navicat创建开发存储过程注意事项:

ce4398d315ce

register.png

2、springboot + mybatis中调用存储过程(多个in参数,多个out参数的情况)使用教程

开发架构:springboot + mybatis

第一步:基于navicat创建存储过程,代码如下(用户注册示例,注意代码业务逻辑并不完整,仅供测试教程用,上图为截图):

BEGIN

declare cnt int DEFAULT 0;

select count(1) into cnt from bv_user where mobile = p_mobile;

if cnt > 0 then

set o_code := -1;

set o_message := '已注册';

ELSE

insert into bv_user (mobile,name,avatar,create_time)values(p_mobile,p_name,p_avatar,now());

-- MySQL 更新或插入后获取受影响行数

SELECT ROW_COUNT() into cnt;

-- mysql 插入一条记录后获取插入记录的主键id

-- SELECT LAST_INSERT_ID();

if cnt > 0 then

set o_code := 0;

set o_message := 'success';

ELSE

set o_code := -1;

set o_message := 'error';

END IF;

END IF;

END

参数为:

IN `p_mobile` varchar(20),IN `p_name` varchar(50),IN `p_avatar` varchar(255),IN `p_code` varchar(10),OUT `o_code` int,OUT `o_message` varchar(100)

第二步,配置UserMapper.xml脚本(对应数据库表user的mapper)

{call registerApp(#{p_mobile,mode=IN,jdbcType=VARCHAR},#{p_name,mode=IN,jdbcType=VARCHAR},#{p_avatar,mode=IN,jdbcType=VARCHAR},

#{p_code,mode=IN,jdbcType=VARCHAR},#{o_code,mode=OUT,jdbcType=INTEGER},#{o_message,mode=OUT,jdbcType=VARCHAR})}

注意:statementType="CALLABLE" 代表的是存储过程,参数顺序需要与第一步中的参数顺序一致,否则会错乱。

第三步,service中调用:

@Service

public class UserServiceImpl implements UserService {

@Autowired

UserMapper userMapper;

@Override

public JsonResult registerApp(String mobile, String name, String avatar, String code) {

//先查询该手机号是否注册,若注册,则提示已注册,注册失败

try {

Map params = new HashMap<>();

params.put("p_mobile",mobile);

params.put("p_name",name);

params.put("p_avatar",avatar);

params.put("p_code",code);

params.put("o_code","-1");

params.put("o_message","");

userMapper.registerApp(params);

System.out.println(params.toString() + ";o_message="+params.get("o_message"));

int ret = Integer.parseInt(String.valueOf(params.get("o_code")));

String message = params.get("o_message");

if(ret == 0){

return new JsonResult(0,message);

}else{

return new JsonResult(ret,message);

}

} catch (NumberFormatException e) {

e.printStackTrace();

return new JsonResult(-1,e.getMessage());

}

}

}

controller层调用代码:

@PostMapping("/register")

public JsonResult registerUser(@RequestParam("mobile") String mobile, @RequestParam("name") String name,

@RequestParam("avatar") String avatar,@RequestParam("code") String code){

return userService.registerApp(mobile,name,avatar,code);

}

第四步,postman中使用post方式传参测试;

ce4398d315ce

image.png

控制台查看日志输出

ce4398d315ce

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值