Mybatis,调用存储过程

目录

1. 创建存储过程

 2. UserMapper.xml文件中写sql标签

3. UserDao接口

 4. 测试

5. 报错


1. 创建存储过程

存储过程名为pr_BlurNameCount(),IN和OUT:

输入参数为myName,查询username=‘lyx'的用户数量,输出参数为u_count

类型为varchar和int

 2. UserMapper.xml文件中写sql标签

如图,在select标签中定义 

 通过调用【存储过程】:call 存储过程名 实现查询,
statementType="CALLABLE"设置SQL的执行方式是存储过程
存储过程的输入参数,在mybatis用Map来场传递(HashMap)

parameterType="HashMap"

所以parameterType="HashMap"是固定写法

输入参数myName和输出参数u_count需要通过HashMap的key值来指定

call 存储过程名(输入参数,输出参数)

要指定两者的jdbcType和mode,其中输入参数的jdbcType为varchar类型,mode为IN

输入参数的jdbcType为INTEGER类型,mode为OUT

<!--    通过调用【存储过程】实现查询,
        statementType="CALLABLE"设置SQL的执行方式是存储过程
        存储过程的输入参数,在mybatis用Map来场传递(HashMap)
        存储过程的输入参数myName和输出参数u_count需要通过HashMap来指定
-->
    <select id="queryCountByBlurName" statementType="CALLABLE" parameterType="HashMap">
        { call pr_BlurNameCount(#{myName,jdbcType=VARCHAR,mode=IN},#{u_count,jdbcType=INTEGER,mode=OUT})}
    </select>

3. UserDao接口

没有返回值,存储过程的结果在HashMap中key值为u_count

 4. 测试

 

这里演示的是查询,测试代码不需要sqlSession.commitI();

如果是删除和修改的存储过程,需要提交,不然会报错;

究其原因,还是mybatis配置文件中的事务管理是jdbc

import com.lyx.mybatis.dao.UserDao;
import com.lyx.mybatis.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //这个session相当于connection
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("myName","lyx");
        mapper.queryCountByBlurName(hashMap);
        System.out.println(hashMap.get("u_count"));
        sqlSession.commit();
    }
}

5. 报错

JavaType和JdbcType的对应关系

 

 MyBatis配置Mapping,JavaType和JDBCType的对应关系,#与$区别     https://www.cnblogs.com/zengming/p/7769219.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素心如月桠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值