Mybatis调用存储过程_6

本文介绍如何利用MyBatis结合存储过程实现查询不同班级的学生数量,并通过单元测试验证功能正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、查询统计各个班级的人数

1)学生表已创建,创建存储过程,及如何调用存储过程

select * from  student;

-- 创建存储过程(查询得到1年级或2年级的数量, 如果传入的是1就年级否则是其他年级)
--(注意必须写分号)  cid 年级编号输入参数; ccount是统计的个数输出参数;
create or replace procedure proc_student(cid number,ccount out number)
as
 v_count number; --声明变量
begin
  select count(1) into v_count from student where class_id=cid;  --查询语句
 if (cid=1) then  --逻辑判断
   ccount:=v_count;
 elsif (cid=2) then
   ccount:=v_count;
 else
   ccount:=-1;
 end if;
end;


--在命令窗口调用
SQL>set serveroutput on
declare  
  ccount number;  --声明变量  
begin  
  proc_student(1,ccount);  
 dbms_output.put_line(ccount);  
end; 
/

二、配置StudentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.hlx.dao.StudentMapper">

<!-- 配置存储过程    parameterMap :参数(Map存放); statementType:存储类型-->
 <select id="getCount" parameterMap="getParameterMap" statementType="CALLABLE" >
    call  proc_student(?,?)   
 </select>
	
<!-- 配置参数(IN or OUT) -->
<!-- jdbcType:数据类型
	     map.put("id", sid);
		 map.put("ccount", -2);
 -->
  <parameterMap type="java.util.Map" id="getParameterMap">
   <parameter property="id" mode="IN" jdbcType="INTEGER"/>
   <parameter property="ccount" mode="OUT" jdbcType="INTEGER"/>
  </parameterMap>

</mapper>

三、单元测试

package com.hlx.test;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.hlx.util.MyBatisUtil;

/**
 * 测试类
 * http://www.cnblogs.com/xdp-gacl/p/4264425.html
 * 
 * @author Administrator
 * 
 */
public class StudentTest {
	// 日志对象
	private Logger logger = Logger.getLogger(StudentTest.class);

	@Test
	public void getStudentCount() {

		SqlSession session = null;
		try {
			// 获得会话
			session = MyBatisUtil.getSqlSession(true);

			// 映射sql的标识字符串
			String statement = "com.hlx.dao.StudentMapper.getCount";
			
			//输入参数
			Scanner scanner = new Scanner(System.in);
			System.out.print("请输入班级编号:");
			int sid = scanner.nextInt();
			
			//参数
			Map<String, Integer> map = new HashMap<String, Integer>();
			map.put("id", sid);
			map.put("ccount", -2);
			

			// 执行插入操作
			 session.selectOne(statement, map);
			 
			 //通过map来获得值
			 Integer count = map.get("ccount");
			 if(count<0){
				 System.out.println("班级编号="+sid+",没有此班级!");
			 }else{
			 System.out.println(sid+"班级的人数是:"+count);
			 }

			logger.debug("查询数据!");

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			session.close(); // 对应一次数据库会话,会话结束必须关闭

		}

	}
}

四、效果如下:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值